问题
上传大约 8MB 或以上的文件时,我收到 500 内部服务器错误。
- 所有 PHP 设置位于
php.ini
是正确的
-
maxAllowedContentLength
已在 web.config 中设置
服务器信息
人们或许可以从maxAllowedContentLength
, 我在跑步IIS 7.5,使用 FastCGI 和 PHP 5.3.17
附加信息
我尝试了很多不同的方法来使其正常工作,但就是找不到问题所在。
但是,我发现以下信息可能有助于找出此问题的根源:
- 当使用服务器上的 Media Wiki 上传文件(较大的文件)时,我收到相同的错误,这表明这不是我的代码中的错误。
-
最重要的是- 我成功地在 Plesk 文件管理器中上传了一个 18MB 的文件,这显然意味着 Plesk 能够解决这个配置问题。我尝试将所有 Plesk 控制面板设置复制到 IIS 中的该域,但这似乎不起作用。
- 正如我尝试编写的那样,在执行脚本之前返回错误
exit;
尝试获取空白屏幕,但这会被忽略并返回 500 错误。
我认为问题出在configure command
PHP 配置的一部分,因为当我更改处理程序映射时.php
使用 Plesk 的文件php-cgi.exe
我没有收到 500 内部错误,而不是通常的错误。话虽如此,我不能将其保留在这个 PHP 版本上,因为它是 Plesk 自己的exe
还有其他配置问题。
我认为这可能与配置命令有关,只是因为这与一个命令有很大不同phpinfo()
到另一个。
如果您有任何想法或建议,请留言。据我所知,我已经尝试了一切,但似乎无法解决这个问题。如果是 Linux 就好了...
提前致谢
UPDATE 1
忘记添加,PHP 错误日志中没有返回任何错误。至于IIS错误,我不知道去哪里找
UPDATE 2
这就是我放在我的web.config
file:
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="2147483647" />
</requestFiltering>
</security>
UPDATE 3
在您的帮助下,我们成功地解决了 IIS 显示的错误。这就是我收到的:
PHP 警告:POST 内容长度 12221448 字节超出限制
第 0 行未知,共 8388608 字节
这与post_max_size
?
UPDATE 4
PHP设置如下(来自phpinfo()
):
post_max_size = 64M
memory_limit = 128M
max_file_uploads = 20
max_execution_time = 6000
upload_max_filesize = 64M
UPDATE 5
最后,以防万一任何人都可以发现任何潜在的问题,Plesk 完全可以上传大文件,所以我假设他们的 php-cgi.exe 的编译方式不同。当我读到他们的配置的 phpinfo() 时configure command
信息有很大不同:
我的配置:
cscript /nologo configure.js“--enable-snapshot-build”
“--disable-isapi” “--enable-debug-pack” “--without-mssql”
“--没有-pdo-mssql”“--没有-pi3web”
“--with-pdo-oci=C:\php-sdk\oracle\instantclient10\sdk,共享”
“--with-oci8=C:\php-sdk\oracle\instantclient10\sdk,共享”
“--with-oci8-11g=C:\php-sdk\oracle\instantclient11\sdk,共享”
“--enable-object-out-dir=../obj/”“--enable-com-dotnet=共享”
“--with-mcrypt=static” “--disable-static-analyze”
Plesk 的配置:
cscript /nologo configure.js “--enable-debug-pack” “--enable-cli”
“--enable-cgi” “--enable-isapi” “--enable-one-shot” “--enable-pdo”
“--enable-intl” “--with-openssl=共享” “--with-pdo-odbc”
“--with-iconv” “--with-xml” “--with-xsl” “--with-mysql”
“--with-mysqlnd” “--with-mysqli” “--with-pdo-sqlite”
“--with-pdo-mysql” “--with-curl=共享” “--enable-mbstring”
“--enable-mbregex”“--with-imap=共享”“--enable-sockets”
“--启用shmop”“--启用soap”
更新(答案)这非常奇怪,因为phpinfo()
info 说的是一件事,但它显然被忽略了,不知道为什么。
如果我改变post_max_size
在 Plesk 中,对于该特定域/子域,则不会发生任何更改(尽管在phpinfo()
)。但是,如果我真的改变了post_max_value
在 php.ini 中,这解决了问题。
这不是解决此问题的好方法,因为当 Plesk 更新时,php.ini 会随着 PHP 更新而被覆盖,从而导致对 php.ini 所做的更改丢失。这意味着每次 Plesk 更新时我都需要对 php.ini 进行更改。这就是为什么 Plesk 提供了无需更改 php.ini 即可更改 PHP 设置的功能。
有人能想到为什么 PHP 忽略本地值并恢复到 php.ini 中的值,即使 php.ini 声明本地值不同?