問題
約 8MB 以上のファイルをアップロードすると、500 Internal Server Error が表示されます。
- のすべての PHP 設定
php.ini
が正しい maxAllowedContentLength
web.configで設定されています
サーバー情報
おそらく からわかるようにmaxAllowedContentLength
、私はIIS 7.5を FastCGI と PHP 5.3.17 で実行しています。
追加情報
これを機能させるためにさまざまなことを試しましたが、単に問題を見つけることができません。
ただし、この問題の原因を突き止めるのに役立つ可能性のある次の情報を見つけました。
- サーバー上にある Media Wiki を使用してファイル (より大きなファイル) をアップロードすると、同じエラーが表示されます。これは、コードのエラーではないことを示しています。
- 最も重要なことは、Plesk File Manager で 18MB のファイルをアップロードできたことです。これは明らかに、Plesk がこの設定の問題を回避できたことを意味します。Plesk コントロール パネルのすべての設定を IIS のこのドメインにコピーしようとしましたが、うまくいかないようです。
- スクリプトを実行する前にエラーが返ってきて
exit;
、一番上に空白の画面を取得しようと書いてみましたが、これは無視されて 500 エラーが返されます。
configure command
ファイルのハンドラー マッピングを通常のものではなく.php
Plesk を使用するように変更すると、500 内部エラーが発生しないため、問題はPHP 構成の一部にあると思います。そうは言っても、これは Plesk 独自のものであり、他の構成の問題があるphp-cgi.exe
ため、この PHP バージョンに残すことはできません。exe
configureコマンドに関係しているのではないかと思う理由は、単純に、これが1つ1つ大きく異なるからphpinfo()
です。
アイデアや提案があれば、投稿してください。私は自分の知る限りすべてを試しましたが、これを修正できないようです。Linuxだったら…
前もって感謝します
更新 1
追加するのを忘れていましたが、PHP エラー ログに返されるエラーはありません。IIS エラーについては、どこを見ればよいかわかりません
更新 2
これは私が私のweb.config
ファイルに入れたものです:
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="2147483647" />
</requestFiltering>
</security>
更新 3
皆様のご協力により、IIS によって表示されるエラーを取得することができました。これは私が受け取っているものです:
PHP 警告: 12221448 バイトの POST コンテンツ長が行 0 の不明で 8388608 バイトの制限を超えています
それはと関係がありpost_max_size
ますか?
更新 4
次のような PHP 設定 (からphpinfo()
):
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=共有" "--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"
更新(回答)情報が1つのことを言っ
ているので、これは非常に奇妙phpinfo()
ですが、明らかに無視されています。理由はわかりません。
post_max_size
その特定のドメイン/サブドメインについて Plesk でを変更しても、何も変更されません ( では変更されているように見えますがphpinfo()
)。ただし、実際にpost_max_value
php.ini を変更すると、問題が修正されます。
これがこれを修正する良い方法ではない理由は、単に、Plesk が更新されると、PHP が更新されると php.ini が上書きされ、結果として php.ini に加えられた変更が失われるためです。つまり、Plesk が更新されるたびに、php.ini を変更する必要があります。これが、Plesk が php.ini を変更せずに PHP 設定を変更する機能を提供する理由です。
ローカル値が異なるとphp.iniが述べているにもかかわらず、PHPがローカル値を無視してphp.iniの値に戻す理由を誰でも思いつくことができますか?