【问题标题】:Strange problem while uploading large files上传大文件时出现奇怪问题
【发布时间】:2011-04-02 08:58:17
【问题描述】:

我在用 PHP 上传大文件时遇到了一个奇怪的问题。

在 php.ini 中,max_execution_time 设置为 30,post_max_size 设置为 32M,upload_max_filesize 设置为 32M。当我尝试上传大小为 40.2 MB 的文件时,它没有显示任何错误。 $_FILES 变量的值是 array(0) { }$_FILES['userfile'] 显示 NULL

如果文件大小大于 php.ini 中设置的值,那么它应该返回错误信息

UPLOAD_ERR_INI_SIZE,值:1;上传的文件超过了 php.ini 中的 upload_max_filesize 指令。

但它也没有显示任何错误(因为$_FILES 是一个空数组)。我不知道为什么会这样。

当我更改 php.ini 并将 post_max_size 设置为 64M 时,upload_max_filesize 设置为 64M,然后它工作正常。因此,我决定使用以下代码,而不是更改 php.ini 文件。

ini_set('upload_max_filesize', '64M');
ini_set('post_max_size', '64M');
ini_set('max_execution_time', 300);

我什至尝试增加max_execution_time。不过,我有同样的问题。 ini_set() 在这里不工作。

【问题讨论】:

  • 我不确定为什么没有引发 UPLOAD_ERR_INI_SIZE 错误,但我可以说使用 ini_set 设置 upload_max_filesize 或 post_max_size 没有影响,因为根据此 ini 列表,这些无法设置运行时: php.net/manual/en/ini.list.php

标签: php file-upload ini-set


【解决方案1】:

要让 40 MB 的文件因上传错误而失败,您必须增加 post_max_size,如果超过该变量的值,您会得到一个空的 $_FILES 数组。见the manual

如果发布数据的大小更大 比 post_max_size、$_POST 和 $_FILES 超全局变量为空。

此外,ini_set() 在那里不起作用,因为您尝试更改的两个变量是PHP_INI_PERDIR,因此需要在 php.ini 或 .htaccess 或 httpd.conf 中进行更改。您应该尝试使用 40MB 文件,例如 these settings in .htaccess

php_value upload_max_filesize 32M
php_value post_max_size 64M
php_value max_execution_time 300

【讨论】:

  • 最佳答案,除非您不能使用 ini_set() 设置 upload_max_filesize 和 post_max_size,只能通过 .conf 或 .ini 文件。
  • 其实这很愚蠢! wq如果我不想让我的网站访客上传超过 2MB (因为他们可以制造洪水),但如果他们是会员上传高达 150MB ????
  • @Ronan:在这种情况下,您必须创建两个单独的目录,一个用于访客上传,另一个用于会员上传。
【解决方案2】:

您可能还需要查看另一个设置,Apache 的 LimitRequestBody

如果文件超过这个值,上传可能在到达 PHP 之前就被阻止。

Apache Documentation

【讨论】:

  • 这也是一个好点。我从来不知道。感谢分享。
【解决方案3】:

ini_set() 在这里不起作用。

您尝试使用ini_set() 更改的值(max_execution_time 除外)不能使用ini_set() 更改。
list of php.ini directives 中,它们被报告为PHP_INI_PERDIR 类型,这意味着(如Where a configuration setting may be set 中所述)它们可以在php.ini、.htaccess 或httpd.conf 中进行更改。可以使用ini_set() 更改的配置设置是标记为PHP_INI_USER 的设置。

【讨论】:

  • 我想将此标记为已接受的答案,但 Stack Overflow 只允许将一个答案标记为已接受的答案,我已经标记了。
  • @Debiprasad:不可能有两个被接受的答案;您应该取消选择之前选择的选项,然后再选择另一个答案作为已接受。
【解决方案4】:

对于服务器:

在 cPanel 中搜索 php,您会在 Software 下找到“Select PHP version”。 软件 -> 选择 PHP 版本 -> 切换到 PHP 选项 -> 更改值 -> 保存。

本地:

在 xampp 下的 php 文件夹中找到 PHP ini(配置设置)文件。 改变 post_max_size = 40Mupload_max_filesize = 40M

【讨论】:

    猜你喜欢
    • 2019-02-12
    • 1970-01-01
    • 2015-04-06
    • 2011-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 2011-06-09
    相关资源
    最近更新 更多