Ben*_*rey 8 php iis upload fastcgi internal-server-error
上传大约8MB或更大的文件时,我收到500内部服务器错误.
php.ini都是正确的maxAllowedContentLength 已在web.config中设置正如人们可以从中看出的那样maxAllowedContentLength,我运行的是IIS 7.5,使用FastCGI和PHP 5.3.17
我已经尝试了很多不同的东西来使这个工作,但根本找不到问题.
但是,我发现以下信息可能有助于找出问题的根源:
exit;在顶部写入以尝试获取空白屏幕,但这将被忽略并返回500错误.我认为问题在于configure commandPHP配置的部分,因为当我更改.php文件的处理程序映射以使用Plesk php-cgi.exe而不是通常的时,我没有得到500内部错误.话虽如此,我不能把它放在这个PHP版本上,因为它是Plesk自己的exe,还有其他配置问题.
我认为它可能与configure命令有关的原因仅仅是因为它与其中一个有很大不同phpinfo().
如果您有任何想法或建议,请发布.我已经尝试了所有知识,似乎无法解决这个问题.如果只是Linux ...
提前致谢
更新1
忘记添加,PHP错误日志中没有返回错误.至于IIS错误,我不知道在哪里看
更新2
这是我在我的web.config文件中放置的内容:
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="2147483647" />
</requestFiltering>
</security>
Run Code Online (Sandbox Code Playgroud)
更新3
在您的帮助下,我们设法获得IIS显示的错误.这是我收到的:
PHP警告:POST Content-Length为12221448字节超过了第0行的Unknown中的8388608字节限制
这跟那个有关系post_max_size吗?
更新4
PHP设置如下(来自phpinfo()):
Run Code Online (Sandbox Code Playgroud)post_max_size = 64M memory_limit = 128M max_file_uploads = 20 max_execution_time = 6000 upload_max_filesize = 64M
更新5
最后,为了防止任何人发现任何潜在的问题,Plesk能够绝对正常上传大文件,所以我认为他们的php-cgi.exe编译方式不同.当我读取他们配置的phpinfo()时,configure command信息非常不同:
我的配置:
cscript/nologo configure.js"--enable-snapshot-build"" - disable-isapi"" - enable-debug-pack"" - without-mssql"" - without-pdo-mssql"" - without-pi3web"" - with-pdo-oci = C:\ php-sdk\oracle\instantclient10\sdk,shared"" - with-oci8 = C:\ php-sdk\oracle\instantclient10\sdk,shared" "--with-oci8-11g = C:\ php-sdk\oracle\instantclient11\sdk,shared"" - enable-object-out-dir = ../obj /"" - enable-com-dotnet = shared""--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 = shared"" - with-pdo-odbc"" - with-iconv"" - with-xml"" - with-xsl"" - -with-mysql"" - with-mysqlnd"" - with-mysqli"" - with-pdo-sqlite"" - with-pdo-mysql"" - with-curl = shared"" - enable -mbstring"" - enable-mbregex"" - with-imap = shared"" - enable-sockets"" - enable-shmop"" - enable-soap"
更新(答案)
这是非常奇怪的,因为phpinfo()信息说一件事,但它显然被忽略,不知道为什么.
如果我更改了post_max_sizePlesk,对于该特定的域/子域,则没有任何更改(尽管它似乎已更改phpinfo()).但是,如果我实际上post_max_value在php.ini中更改了,那么这就解决了这个问题.
之所以这不是解决这个问题的好方法,原因很简单,因为当Plesk更新时,php.ini会被覆盖,因为PHP会更新,结果对php.ini所做的更改就会丢失.这意味着每次Plesk更新我都需要对php.ini进行更改.这就是为什么Plesk能够在不更改php.ini的情况下更改PHP设置的原因.
任何人都可以想到为什么PHP忽略本地值并恢复到php.ini中的值,即使php.ini声明本地值不同?
如果你查看PHP 的源代码,你可以在文件php-5.4.8-src\main\rfc1867.c第 706-709 行看到:
if (SG(post_max_size) > 0 && SG(request_info).content_length > SG(post_max_size)) {
sapi_module.sapi_error(E_WARNING, "POST Content-Length of %ld bytes exceeds the limit of %ld bytes", SG(request_info).content_length, SG(post_max_size));
return;
}
Run Code Online (Sandbox Code Playgroud)
文件中也有同样的内容php-5.4.8-src\main\SAPI.c。因此,该消息PHP Warning: POST Content-Length of 12221448 bytes exceeds the limit of 8388608 bytes in Unknown on line 0是关于 post_max_size 设置的。您已通过使用 phpinfo() 确认您已正确配置此设置,但无论如何它似乎都使用默认值 8M。
至于为什么,请看这个帖子:
事实证明,在 Windows 上,您只能设置
PHP_INI_USER按目录标记的 ini 指令。不幸的是,upload_max_filesize和post_max_size都是PHP_INI_PERDIR。来自 PHP 文档 http://php.net/manual/en/configuration.changes.php对于从该目录或其任何子目录运行的任何脚本,该目录的设置都将处于活动状态。键下的值应包含 PHP 配置指令的名称和字符串值。不解析值中的 PHP 常量。 但是,只有 PHP_INI_USER 中可更改的配置值可以这样设置,而 PHP_INI_PERDIR 值则不能。
因此,即使 Plesk 有一个可以更改这些指令的界面,并且即使
phpinfo()接受了它们,它们也不会改变实际的最大上传大小。Plesk 不应允许您在 Windows 上更改这些内容,也不phpinfo()应报告更改,但您能做什么。
所以,它是 post_max_size,需要在 php.ini 上设置。即使 phpinfo 另有说明,Plesk 设置根本不起作用。我还打开了一个关于 phpinfo 行为的错误条目,因为似乎没有该条目。
| 归档时间: |
|
| 查看次数: |
8271 次 |
| 最近记录: |