【问题标题】:PHP $_FILE array missing entries from submitted HTML formPHP $_FILE 数组缺少提交的 HTML 表单中的条目
【发布时间】:2011-01-10 06:56:31
【问题描述】:

基本上,当我以一种形式上传超过 25 个文件时,PHP $_FILES 数组会被裁剪为前 25 个条目 (0-24),这是不正确的。它应该有全部 31 个。 这只发生在一台特定的服务器上。 Apache 与 PHP。我已经在另外两台服务器上尝试过,它们似乎允许所有 31 台服务器。

这可能是由 Apache 中的某些配置选项引起的吗?还是更可能是 PHP 中的配置问题?

我唯一能想到的可能是 LimitRequestFields apache 指令,但这应该会引发错误,而不是仅仅将其裁剪为前 25 个。对吗?

我知道在一个表单中包含这么多文件字段是不好的做法,但是由于此特定页面所需的功能,这是必要的。我无法解决这个问题。

对于这个问题的任何帮助将不胜感激。

下面的 HTML 演示了我遇到的问题。

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>

<form enctype="multipart/form-data" action="test.php" method="post">
<input type="file" name="field_id_11[0][1]"/>
<input type="file" name="field_id_11[1][1]"/>
<input type="file" name="field_id_11[2][1]"/>
<input type="file" name="field_id_11[3][1]"/>
<input type="file" name="field_id_11[4][1]"/>
<input type="file" name="field_id_11[5][1]"/>

<input type="file" name="field_id_11[6][1]"/>
<input type="file" name="field_id_11[7][1]"/>
<input type="file" name="field_id_11[8][1]"/>
<input type="file" name="field_id_11[9][1]"/>
<input type="file" name="field_id_11[10][1]"/>
<input type="file" name="field_id_11[11][1]"/>
<input type="file" name="field_id_11[12][1]"/>
<input type="file" name="field_id_11[13][1]"/>
<input type="file" name="field_id_11[14][1]"/>
<input type="file" name="field_id_11[15][1]"/>
<input type="file" name="field_id_11[16][1]"/>
<input type="file" name="field_id_11[17][1]"/>
<input type="file" name="field_id_11[18][1]"/>
<input type="file" name="field_id_11[19][1]"/>
<input type="file" name="field_id_11[20][1]"/>
<input type="file" name="field_id_11[21][1]"/>
<input type="file" name="field_id_11[22][1]"/>

<input type="file" name="field_id_11[23][1]"/>
<input type="file" name="field_id_11[24][1]"/>
<input type="file" name="field_id_11[25][1]"/>
<input type="file" name="field_id_11[26][1]"/>
<input type="file" name="field_id_11[27][1]"/>
<input type="file" name="field_id_11[28][1]"/>
<input type="file" name="field_id_11[29][1]"/>
<input type="file" name="field_id_11[30][1]"/>
<input type="text" name="blah" value="something"/>
<input type="submit" />
</form>

</body>
</html>

【问题讨论】:

    标签: php apache forms file-upload


    【解决方案1】:

    PHP 将上传的文件放到一个临时目录中。因此,您可以通过检查额外的 6 个文件是否在该临时目录中来确认问题是 PHP 还是 Apache。

    我要做的是获取第一个文件的位置,然后运行一个循环来回显该目录中的所有文件。如果是 31 就是 PHP,如果是 25 就是 Apache。

    【讨论】:

      【解决方案2】:

      最多 25 个文件”和“仅在特定服务器上发生”似乎表明该服务器上有一些配置/安全措施。

      而“25 max uploads”是suhosin PHP extension 的默认配置——参见suhosin.upload.max_uploads 配置指令。


      该扩展默认安装在某些 Linux 发行版上(出于安全原因) - Ubuntu 默认提供它,例如,如果我没记错的话;您可以在phpinfo() 的输出中检查它是否已安装/启用。

      【讨论】:

      • 非常感谢您。我什至不知道它的存在。我在服务器的 php.ini 文件中添加了: suhosin.upload.max_uploads = ,现在服务器运行良好。再次感谢 :) 也感谢其他所有回答的人。这是我第一次使用这个网站。
      • 不客气 :-) ;;每件事都必须有第一次(你的问题写得很好,有一个代码示例,标签没问题,一切都很好——这对于第一个问题来说非常好!) ;-)
      【解决方案3】:

      查看ini file directives 的文件上传部分。

      自 PHP 5.2.12 起有一个 max_file_uploads 限制设置可用,如果您使用的是该版本或更高版本,您可能需要考虑调整它。

      同样,upload_max_filesize 是所有上传文件组合的总数最大值,因此您可能会在此处遇到限制,尽管从描述中听起来更可能是 @ 987654324@限制器是问题。

      【讨论】:

        【解决方案4】:

        如果查看 Suhosin 配置设置不起作用。尝试检查 php.ini 中的 upload_max_filesizepost_max_size 选项。

        【讨论】:

          【解决方案5】:

          【讨论】:

            【解决方案6】:

            为什么不使用 move_uploaded_file 它的工作只是尝试在数组中添加路径并在这个函数中执行如果不工作?复制 move_uploaded_file (文件数)这不好,但它的工作 试试吧

            $file1 = $_POST['file1'];
            $file2 = $_POST['file2'];
            $file3 = $_POST['file3'];
            $file4 = $_POST['file4'];
            $file5 = $_POST['file5'];
            $file6 = $_POST['file6'];
            $array = array($file1,$file2,$file3,$file4,$file5,$file6);
            
             if(isset($_POST['submit']))
             {
              for($i=0;$i<count($array);$i++)
              {
               $dir = $array[$i];
            
               $uploaddir  = "dirfiles/";
               $uploadfile = $uploaddir.$_FILES['file1']['name'];
               move_uploaded_file($_FILES['file21']['tmp_name'],$uploadfile);
            
               $uploaddir  = "dirfiles/";
               $uploadfile = $uploaddir.$_FILES['file2']['name'];
               move_uploaded_file($_FILES['file2']['tmp_name'],$uploadfile);
            
                       ?????????????????????????????????????????????????????
                       ?????????????????????????????????????????????????????
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2017-03-06
              • 2012-02-12
              • 1970-01-01
              • 1970-01-01
              • 2019-07-28
              • 2022-11-22
              • 1970-01-01
              相关资源
              最近更新 更多