【问题标题】:PHP: Sending file into script for processingPHP:将文件发送到脚本中进行处理
【发布时间】:2013-12-11 23:11:57
【问题描述】:

我在下面写了 PHP 代码。它获取 csv 文件并计算第二部分中条目的每次出现。 当文件由文件名给出时,它工作得很好。 我想使用 www 表单来选择 csv 文件并将其提交以在我的脚本中进行处理。无需保存在服务器端。 我试图以现在评论的方式来做。你知道怎么做吗?

<?php
//$uploaded=$_FILES["file"];
//$file = file($uploaded, FILE_SKIP_EMPTY_LINES | FILE_IGNORE_NEW_LINES );

$file = file('dump.csv', FILE_SKIP_EMPTY_LINES | FILE_IGNORE_NEW_LINES );

$amount = count($file);
$name = array();
$qty = array();
$j=0;

$pars=str_getcsv($file[0], ';');

$name[0]=$pars[1];                  
$qty[0]=1;


for ($i=1; $i<=$amount;$i++){
for ($a=0; $a<=$j;$a++){
    $pars=str_getcsv($file[$i], ';');
    if ($name[$a]!=$pars[1]){
        if($a==$j){
            $j++;
            $name[$j]=$pars[1];
            $qty[$j]=1;
            break;
        }

    }       
    else {  
    $x=$qty[$a];
    $qty[$a]=$x+1;
        break;

    }
}
}   

for ($b=0; $b<=$j;$b++)
{
echo $name[$b] . $qty[$b] . "<br>";

}

?>

HTML:

<form action="skrypt.php" method="post"
enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file"><br>
<input type="submit" name="submit" value="Submit">
</form>

</body>
</html>

【问题讨论】:

  • 我不明白你的问题是什么。你能澄清一下吗?

标签: php file csv file-upload


【解决方案1】:

上传的文件来自保留变量$_FILES,格式如下:

array(
    "name" => "dump.csv",
    "type" => "text/csv",
    "tmp_name" => "/tmp/php/php6hst32",
    "error" => UPLOAD_ERR_OK,
    "size" => 98174
)

"tmp_name" 是文件名,所以将代码的第一行替换为:

$uploaded = $_FILES["file"]["tmp_name"];
$file = file($uploaded, FILE_SKIP_EMPTY_LINES | FILE_IGNORE_NEW_LINES );

【讨论】:

    【解决方案2】:

    试试这个

    $file = file_get_contents($_FILES["file"]["tmp_name"]);
    

    然后通过你的程序正常运行它。此外,您可能还想阅读与 php.ini 文件上传相关的安全问题。您需要使用“tmp_name”,因为当文件上传到 Web 服务器时,它被放置在一个特殊的 tmp 目录中。这样做是为了防止攻击者将脚本上传到您的 Web 服务器,然后请求会导致 Web 服务器执行该脚本的 url。

    想象一下这个场景

    攻击者将其写入名为 asgoodasaterminal.php 的文件中

    <?php 
        echo $_GET['cmd'];
        $out = shell_exec($_GET['cmd']);
        echo $out; 
    ?>
    

    然后将其上传到您的网络服务器,例如您希望将 csv 文件作为上传文件。因此,您将您认为是 csv 文件的内容移动到 /var/www/uplaods/csv

    接下来攻击者进入他的浏览器

    http://www.yoursite.com/uplaods/csv/asgoodasaterminal.php?cmd=<any command you want>
    

    攻击者现在可以做任何 Web 服务器用户有权做的事情。

    【讨论】:

      猜你喜欢
      • 2012-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多