2009-03-06 15 views
11

PHP 5.0.4では、を設定しないと、memory_limitディレクティブは無視されます。 (推奨のphp.iniファイルでは8Mに設定されていますが、ドキュメントには無視されているというメッセージが表示されます)。その場合、スクリプトごとのメモリ制限がありますか?PHPのメモリ制限

私はPHP 5.2.8にアップグレードしているので、になりますので、デフォルトでメモリ制限が可能です。だから私は実際に値を適切なものに設定しなければなりません。推奨されているphp.iniファイルの現在のサイズは128Mに設定されていますが、それがであるかどうかわかりません。またはより小さくなりました。

私は本番システムをアップグレードしていますので、動作の大きな変更は避けてください。 documentation( "memory_limit"を検索)は、この時点で非常に混乱しています。それは "デフォルト"と言われていますが、それは設定ファイルに設定されているデフォルト値、またはメモリ制限が無効なときに使用するデフォルト値を意味するかどうかわかりません。

答えて

9

PHPのメモリリミッタはオプションです。コンパイル時に無効にすると、制限はまったくありません。

5.0.4では、メモリリミッタがuseless until 5.2であり、mysql関数などの多くのことを数えていなかったため、コンパイル時に明示的に要求しない限り無効になります。今度は、彼らが数えることを学んだのはで、は5.2.1からです。

疑わしい場合は無効にするか、新しいデフォルトを使用するように設定ファイルを更新してください。それを8MBにして5.2.8にアップグレードすることは、ほとんど間違いなく問題を引き起こすでしょう。

4

128Mは非常に高いです。あなたはそれを必要とするかもしれませんが、私は驚くでしょう。端的に言え

、制限はphp.iniのグローバルデフォルトに設定することができます。

memory_limit = 32M 

また、スクリプトでそれを上書きすることができます。

<?php 
ini_set('memory_limit', '128M'); 
... 

あなたはおそらく見つけることができますたくさんのメモリを必要とするスクリプトはほんの一握りです。いくつかの快適な価値を見つけて(テストを使って)、さらにそれを必要とするもののためにそれを上げてください。

+1

私の質問は次のとおりです:5.0.4では、memory_limitを設定しないと、それでも1を強制しますか? –

+3

+1、PHPのガベージコレクタが複数回壊れています。タイムアウトを取り除くことは非常に人気があり、コードが実際にコンピュータに__doing__していることを知ることが重要です。 –

3

5.2より前のphpのデフォルトのメモリ制限は8MBでしたが、これはphp 5.2.0ではデフォルトの16MBに増加しました。現在、デフォルトは128MBです。

pre 5.2バージョンの動作を再現するには、明示的にメモリ制限を8MBに設定します。

php.net Webサイトの「リソース制限」を参照してください。

http://us.php.net/ini.core

EDIT

「PHP 5.2.1以前には、このディレクティブを使用するためには、configure行に-enable-メモリ制限を使用することにより、コンパイル時に有効にする必要がありました"

以前のサーバーのコンパイルフラグをチェックします。これを有効にしなかった場合、制限は適用されませんでした。

+1

8MBが実際に強制されたかどうか知っていますか?これはphp.iniの設定のデフォルト値でしたが、設定は無視されていました。 –

+0

私はこの答えに投票することを意味しなかった、それは事故だった。 – boclodoa