使用多个 & php 上传文件

Posted

技术标签:

【中文标题】使用多个 & php 上传文件【英文标题】:uploading file using multiple & php 【发布时间】:2013-12-09 18:39:11 【问题描述】:

我正在尝试使用以下代码上传文件:

    echo "<form method='POST' action='uploadfile.php?action=addok' enctype='multipart/form-data'>
        <input type=\"file\" multiple=\"true\" name=\"userfile[]\"  />
            <input type='submit' value=' add '>
            </form>";

    if ($_GET['action'] == 'addok') 

      echo "\$_FILES['userfile']=".count($_FILES['userfile'])."<br />\$_FILES['userfile']['name']=".count($_FILES['userfile']['name'])."<br />\$_FILES=".count($_FILES)."<br />";
    

它只为所有计数返回 0。 如果我只上传 1 个,它会返回计数,否则 .. 什么都没有 .. 我从昨天开始就在尝试解决它的问题。 有人可以帮忙吗?

【问题讨论】:

改为var_dump($_FILES) 看看里面有什么。当您进行多个同名上传时,PHP 有一些关于如何构建 $_FILES 的真正愚蠢的想法。 以上方法是什么? 我猜你的returns 0 是因为你试图一次上传多个文件。如果是这种情况,那么您将需要一个foreach - “它只返回 0 表示 all 计数。如果我只上传 1 个” 我的意思是下面:),我早上写了第一行代码,当时我在我的问题之前写了代码,忘记仔细检查了。 @fred-ii- 我只是没有运气,同样的问题.. 【参考方案1】:
    if ($_GET['action'] == 'addok') 

        foreach($_FILES['userfile'] as $key=>$val)

              print_r($val);
        
    

【讨论】:

你试过这个var_dump($_FILES['userfile']); 多上传时,返回NULL 您是否选择了文件并点击了添加按钮?【参考方案2】:

您正在计算 $_FILES,它始终为 1:

尝试:

echo "<form method='POST' action='uploadfile.php?action=addok' enctype='multipart/form-data'>
            <input type=\"file\" multiple=\"true\" name=\"userfile[]\"  />
                <input type='submit' value=' add '>
                </form>";

        if ($_GET['action'] == 'addok') 
          echo "<pre>";
            print_r($_FILES);
            echo "</pre>";
          echo "\$_FILES['userfile']=".count($_FILES['userfile'])."<br />\$_FILES['userfile']['name']=".count($_FILES['userfile']['name'])."<br />\$_FILES=".count($_FILES['userfile']['name'])."<br />";
        

print_r:

Array
(
    [userfile] => Array
        (
            [name] => Array
                (
                    [0] => file1.txt
                    [1] => file2.txt
                    [2] => file3.txt
                )

            [type] => Array
                (
                    [0] => text/plain
                    [1] => text/plain
                    [2] => text/plain
                )

            [tmp_name] => Array
                (
                    [0] => C:\wamp\tmp\php1F5C.tmp
                    [1] => C:\wamp\tmp\php1F5D.tmp
                    [2] => C:\wamp\tmp\php1F5E.tmp
                )

            [error] => Array
                (
                    [0] => 0
                    [1] => 0
                    [2] => 0
                )

            [size] => Array
                (
                    [0] => 0
                    [1] => 0
                    [2] => 0
                )

        )

)

结果:

$_FILES['userfile']=5
$_FILES['userfile']['name']=3
$_FILES=3

【讨论】:

也不起作用..返回:Array ( ) $_FILES['userfile']=0 $_FILES['userfile']['name']=0 $_FILES=0 自己尝试一下:hussein.be/tst.php 也在本地主机上不起作用.. 如果我选择 1 个文件,它工作正常,如果我选择超过 1 个文件,$_FILES 为空..【参考方案3】:

检查你的 php.ini,函数 max_file_uploads() 的值应该大于 1

那就试试这个,

    <form method="post" action="uploadfile.php?action=addok" enctype="multipart/form-data">
    <input type="file" name="userfile[]" multiple>
    <input type="submit" value="UPLOAD">
    </form>

    $folder = “/home/username/www/uploading/”;
if (is_uploaded_file($HTTP_POST_FILES['userfile']['tmp_name']))     
    if (move_uploaded_file($HTTP_POST_FILES['userfile']['tmp_name'], $folder.$HTTP_POST_FILES['userfile']['name'])) 
         Echo “File uploaded”;
     else 
         Echo “File not moved to destination folder. Check permissions”;
    ;
 else 
     Echo “File is not uploaded.”;
; 

您需要确保您的上传文件夹具有正确的权限。 chmod -R 777 更改权限,以便 php 可以上传到该文件夹​​。

需要注意的是,IE http://caniuse.com/#feat=fileapi

html5 input type file's multiple attribute not working in IE?

【讨论】:

你检查你的权限了吗? 是的,我也在我的本地主机上试过。什么都没有..正如我在其他帖子中提到的,它仅适用于单个文件。! 从输入中删除多个并尝试。然后再添加 2 个输入字段的副本,看看它是否适用。 你检查过你的php.ini吗,函数max_file_uploads()的值应该大于1。 设置为 20 . 并且代码适用于单次上传,但不适用于多个..【参考方案4】:

解决方案::

看来问题不在代码中,而是在浏览器中。

由于插件或我认为的其他问题,它无法在 firefox、opera 或 chrome 中运行。

我确实在安全模式 click shift + firefox icon to open in safe mode 下运行了 firefox,它工作正常。

这是万一有人再次遇到同样的问题。

注意: 如果有人知道如何检测此问题并警告用户,请成为我的热情:)

【讨论】:

以上是关于使用多个 & php 上传文件的主要内容,如果未能解决你的问题,请参考以下文章

使用 PHP 上传多个文件 [重复]

使用PHP脚本如何上传多个文件

如何使用 PHP、jQuery 和 AJAX 上传多个文件

使用php上传ajax多个文件

php如何实现一次性上传多个文件

QHttpMultiPart 上传多个文件