4

通过 PHP(通过 Drupal,虽然这不是问题)上传大文件时,我遇到了一个奇怪的问题。

基本上,由于达到 post_max_size 限制,我的文件上传失败,即使本地指令设置为 96M,文件为 25M。

我已确保其他所有内容都是正确的,包括max_input_timemax_upload_filesize和 IIS FastCGI 空闲时间。所有这些都很大,不是问题。

我正在post_max_size通过 Plesk 覆盖该指令,它(我相信)将更改存储在注册表值中。在域上运行 phpinfo() 会显示所有指令的正确本地和主值...96M 本地,12M 主。

很奇怪的是,当我把post_max_sizephp.ini中的master从12M改成96M(并确保修改已经生效)后,就正常工作了!将主值更改回 12M(并保持本地值 96M)会立即导致上传再次失败。

这是PHP中的错误,还是我做错了?

4

3 回答 3

2

事实证明,在 Windows 上,您只能设置PHP_INI_USER按目录标记的 ini 指令。不幸的是,upload_max_filesize两者post_max_size都是PHP_INI_PERDIR来自http://php.net/manual/en/configuration.changes.php的 PHP 文档

该目录的设置对于从此目录或其任何子目录运行的任何脚本都是活动的。键下的值应具有 PHP 配置指令的名称和字符串值。值中的 PHP 常量不会被解析。但是,只有 PHP_INI_USER 中可更改的配置值可以这样设置,PHP_INI_PERDIR 值不能。

因此,即使 Plesk 有一个界面来更改这些指令,并且即使phpinfo()接受了它们,它们也不会改变实际的最大上传大小。Plesk 不应允许您在 Windows 上更改这些内容,phpinfo()也不应报告更改,但您能做什么。

于 2012-08-01T15:32:10.810 回答
1

检查 php.ini 中 PHP 的 post_max_size 和 upload_max_filesize 以及是否有任何覆盖(例如本地 php.ini 或 .htaccess)

编辑:应该注意的是,不能依赖 phpinfo() 来确定在请求期间(也就是文件上传时)是否有任何覆盖可用,因为它将在响应期间进行处理。

于 2012-07-30T21:55:14.183 回答
0

我在 Plesk 中遇到过类似的问题。您是否在 Plesk 中编辑过任何模板?我知道当它运行它的 cron 作业时,如果您没有通过 Plesk 进行某些配置编辑,您可能会丢失它们。

但是你的 .htaccess 文件呢?您还可以在此处设置这些限制,并且根据您的 Plesk 配置,这可能是进行这些更改的更好位置。

于 2012-07-31T16:02:04.670 回答