PHP - 空 $_POST 和 $_FILES - 上传较大文件时

标签 php html

我有以下问题,我有一个 HTML 表单,可以上传包含一些额外信息的文件。但它允许上传小于 10MB 的文件。但是当用户尝试上传更大的东西时,$_POST 和 $_FILES 数组都是空的(我预计 $_POST 会有一些值,而 $_FILES 会有一些值但会表明存在上传错误)。

有几个类似的问题(空的 $_POST、$_FILES),但我没有找到任何解决方案或解释。

HTML 表单:

<form enctype="multipart/form-data" method="post" action="upload.php">
    <p>
        <input type="hidden" name="MAX_FILE_SIZE" value="10000000" />
        <input type="file" name="image"  />
    </p>
    <p>
        <input type="text" name="other_field" />
    </p>
</form>

上传.php

print_r($_POST);  // array()
print_r($_FILES); // array()
exit;

它工作正常,如果文件大小低于 10MB(文件大小限制为 10MB),我不想增加它,我只想在 PHP 中捕获一个错误。

从 PHP 网站更新(说明/解决方案)

来自 PHP 网站(我错过了这个部分): http://us.php.net/manual/en/ini.core.php#ini.post-max-size

设置允许发布数据的最大大小。此设置也会影响文件上传。要上传大文件,该值必须大于upload_max_filesize。如果您的配置脚本启用了内存限制,那么 memory_limit 也会影响文件上传。一般来说,memory_limit 应该大于 post_max_size。使用整数时,该值以字节为单位。也可以使用本常见问题解答中描述的速记符号。如果 post 数据的大小大于 post_max_size,则 $_POST 和 $_FILES 超全局变量为空。这可以通过各种方式进行跟踪,例如通过将 $_GET 变量传递给处理数据的脚本,即 ,然后检查是否设置了 $_GET['processed']。

最佳答案

如已编辑问题中所述,当 PHP 静默丢弃数据时,$_POST 和 $_FILES 为空(当实际数据大于 post_max_size 时发生)。由于 HTTP header 和 $_GET 保持不变,它们可用于检测丢弃。

选项 a)

if(intval($_SERVER['CONTENT_LENGTH'])>0 && count($_POST)===0){
    throw new Exception('PHP discarded POST data because of request exceeding post_max_size.');
}

选项 b)
添加一个 GET 参数来判断是否存在 POST 数据。

关于PHP - 空 $_POST 和 $_FILES - 上传较大文件时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7852910/

相关文章:

html - 固定导航根据背景改变不透明度

javascript - 检查是否存在任意 Controller / Action

php - 检查是否设置了背景图像

php - 谷歌地图 JS API V3 : Map won't show in Internet Explorer

php - 引用 jQuery .ajax Post 函数

php - 如何使用空格作为分隔符将字符串拆分为 5 个单词的部分

html - CSS:文本不会居中?

javascript - 根据屏幕大小自动调整图像大小

html - CSS:并排,相同高度

html - 如何在多行 block 元素中只给单词上色?