将多个文件上传到服务器:错误地导致PHP代码

时间:2015-06-14 16:54:02

标签: php html

我有以下HTML和PHP代码来处理将多个文件上传到服务器中的文件夹。 只有一个文件(来自选定的上传文件)上传到服务器。 有人可以告诉我我做错了什么吗?我刚刚开始使用PHP / HTML,对此任务一无所知。

HTML:



<form action="upload_multi15_action.php" method="POST" enctype="multipart/form-data">
    Select files to upload: <br />
        <input name="userfile[]" type="file" /><br />
        <input name="userfile[]" type="file" /><br /> 
        <input name="userfile[]" type="file" /><br />
        <input name="userfile[]" type="file" /><br /> 
        <input name="userfile[]" type="file" /><br />
        <input name="userfile[]" type="file" /><br />
        <br />
        <input type="submit" value="Upload files">


</form>
&#13;
&#13;
&#13;

PHP:

&#13;
&#13;
    $count=0;

    echo '<pre>';
    foreach($_FILES['userfile']['name'] as $to_upload){    
        $upload = "./".basename($to_upload);
        move_uploaded_file($_FILES['userfile']['tmp_name'][$count], $upload) or       
            die("Possible file upload attack!\n");
        $count = $count++;
        $upload = '';
    }
    print "</pre>";
&#13;
&#13;
&#13;

我完全迷失了PHP代码的错误。

2 个答案:

答案 0 :(得分:1)

更改此foreach($_FILES['userfile']['name'] as $to_upload){

foreach($_FILES['userfile']['name'] as $key => $to_upload){

然后像这样使用$ key

move_uploaded_file($_FILES['userfile']['tmp_name'][$key], $upload)

答案 1 :(得分:0)

$count = $count++;

正如它在这里写的那样,我希望它总是为0.后增量运算符返回值,然后递增它。但是您将返回的值分配回同一个变量。因此,下次尝试移动上传的文件时,它已不再存在,因为您已经移动了第一个文件。

你真的不需要以这种方式保留一个计数器,你可以预先给你索引,就像我在这里做的那样。

<?php
echo '<pre>';
foreach($_FILES['userfile']['name'] as $count => $to_upload){ 
    if($_FILES['userfile']['error'][$count] != 0) {
        echo "Error {$_FILES['userfile']['error'][$count]} on $count<br>";
        continue;
    }
    $upload = "./".basename($to_upload);
    move_uploaded_file($_FILES['userfile']['tmp_name'][$count], $upload) or       
        die("Possible file upload attack!\n");
    $upload = '';
}
print "</pre>";

作为旁注,您应该检查传入的名称。例如:正如其中所写,有人可以通过上传具有相同名称的PHP文件来替换您自己的上传文件。 [编辑]如果您希望文件是特定类型的文件,那么检查传入数据通常也是个好主意。例如,如果您期望图像文件,请确保getimagesize可以解析文件。

或者,如果您不想使用foreach中的索引,并希望保留基于增量的方法,只需将$count = $count++;更改为$count++;这将删除分配后递增返回值返回$count变量,导致$count永不改变。