PHPリソースを制限しているのは何ですか?
質問
PHPからより多くのメモリを取得するのに問題があります。
これはエラーメッセージです:
Fatal error: Allowed memory size of 20971520 bytes exhausted (tried to allocate 82 bytes) in ...
まだ:
php.iniファイルのmemory_limitを32Mに設定しました:
memory_limit = 32M;
実際のスクリプトで手動でオーバーライドしようとしました:
ini_set('memory_limit', '32M');
そして、ここで私は迷っています-phpinfo()を介して、このphp.iniファイルが実際に使用されるiniファイルであり、memory_limitが正しく設定されているようであることを確認しました。 memory_limitの行はこれを与えます:
memory_limit 32M 32M
すべてが正しく構成されているように見えますが、20971520バイト(〜20M)しか取得できません。
この制限が課されている場所を見つけるために他にどこを探すべきですか?
編集: VPSのUbuntu 9.04で、nginx / fastcgiの下でphpを実行しています。 php-cgiプロセスは少しリソースを消費するように見えます(RES = 25m、VIRT = 187m)が、10mの物理メモリと500mのスワップスペースがあります。
解決 2
実行中のコードに目を通すだけで、誰かがこれを設定ファイルにハードコーディングしました:
ini_set('memory_limit', '20M');
これは、私が行っていた他のすべてをオーバーライドしていました。ふう。
他のヒント
私の最初の本能は、PHPが別のphp.iniを読み込んでいると推測することです。
Debian(およびほとんどの場合Ubuntu)では、PHPの各バージョン(cli、cgi、およびapache)に独自のphp.iniのコピーがあります。
.htaccessファイルに設定してみてください。これは、1つのサーバーでサイトを機能させるために行う必要があります。
使用した設定は次のとおりです。
php_value upload_max_filesize 50M
php_value post_max_size 60M
php_value memory_limit 128M