41

致命的なエラー:許可されたメモリサイズ67108864バイトが使い果たされました(13965430バイトを割り当てようとしました)

PHPInfoは、私が128Mのmemory_limitを持っていることを示しているので、エラーが64Mしかないことを示している理由について混乱しています。phpinfoが誤って報告する可能性はありますか?または、PHPが2つの別々のphp.inisを使用する場合はどうなりますか?

このエラーは、私の同僚が知らないうちに追加したプライマリphpファイルの1つでのini_set呼び出しが原因で発生していました。

4

8 に答える 8

38

PHP の構成は、複数の場所で設定できます。

  1. マスターシステムphp.ini(通常は /etc のどこかに)
  2. Apache の設定のどこか (httpd.conf またはサイトごとの .conf ファイル、経由php_value)
  3. CLI と CGI は異なる場合がありますphp.ini(コマンドを使用php -i | grep memory_limitして CLI conf を確認します)。
  4. ローカル .htaccess ファイル (またphp_value)
  5. スクリプト内 (経由ini_set())

PHPinfo の出力では、「マスター」値はコンパイル時のデフォルト値であり、「ローカル」値は実際に有効なものです。デフォルトから変更することも、上記の場所のいずれかでオーバーライドすることもできます。

また、PHP には通常、コマンドラインと Web サーバーベースの操作用に異なる .ini ファイルがあることに注意してください。コマンド ラインからチェックphpinfo()すると、Web ベースのスクリプトで実行した場合とは異なる値が報告されます。

于 2010-11-04T12:31:29.680 に答える
25
ini_set('memory_limit', '128M'); 

また

php.ini  =>  memory_limit = 128M

また

php_value memory_limit 128M
于 2011-03-26T23:14:40.287 に答える
18

私は同じ問題を抱えていました。私は答えを見つけました:

ini_set('memory_limit', '-1');

注: サーバーのメモリ使用量は無制限です。

更新: これは慎重に使用してください。PHP スクリプトが大量のメモリを使用し始め、大量のスワップ スペースが使用されると、システムの速度が低下する可能性があります。プログラムが多くのメモリを必要としないことがわかっていて、現在どれだけメモリを設定すればよいかわからない場合に、これを使用できます。しかし、最終的には、そのプログラムに必要なメモリ量がわかります。

@ で回答された値として、常にメモリ制限を行う必要がありますşarkı dinle

ini_set('memory_limit', '512M');

無制限のメモリを与えることは悪い習慣です。むしろ、許容できる最大制限を与えてから、コードを最適化するか、RAM を追加する必要があります。

于 2012-04-14T07:21:40.920 に答える
6

メモリはいくつかの場所で構成する必要があります。 512M に
設定:memory_limit

sudo vi /etc/php5/cgi/php.ini
sudo vi /etc/php5/cli/php.ini
sudo vi /etc/php5/apache2/php.ini Or /etc/php5/fpm/php.ini

サービスを再起動します。

sudo service service php5-fpm restart
sudo service service nginx restart

また

sudo service apache2 restart

最後に、問題を解決する必要がありますmemory_limit

于 2015-05-08T07:21:55.930 に答える
3

php.iniを設定した後にApacheを再起動したことが確実な場合は、間違ったphp.iniファイルを見ている可能性があります。

于 2010-11-04T12:27:33.497 に答える
2
1 check current limit:
(in my os)php -i | grep limit  => memory_limit => 256M => 256M

2  locate php.ini 
php --ini =>   
Configuration File (php.ini) Path: /etc
Loaded Configuration File:         /etc/php.ini
Scan for additional .ini files in: /etc/php.d
Additional .ini files parsed:      /etc/php.d/curl.ini 
...

3 change memory_limit in php.ini
vi /etc/php.ini
memory_limit = 512M

4 restart nginx and (php-fpm if being used)
service php-fpm restart
service nginx restart
于 2017-11-22T03:56:58.600 に答える
1

メモリ制限を増やしてエラーを取り除き、コードが機能するようになった場合は、そのメモリ使用量を減らすための対策を講じる必要があります。それを減らすためにあなたができることがいくつかあります:

ファイルを読み込む場合は、ファイル全体をメモリに読み込むのではなく、1 行ずつ読み込みます。fgets と SplFileObject::fgets を見てください。PHP 5.3 を使用している場合は、新しいバージョンの PHP にアップグレードします。PHP 5.4 および 5.5 は、はるかに少ないメモリを使用します。

大規模なデータセットを配列にロードすることは避けてください。代わりに、より大きなデータセットの小さなサブセットを処理し、必要に応じてデータをデータベースに保存してメモリの使用を軽減します。

サードパーティ製ライブラリの最新バージョンまたはマイナー バージョン (たとえば、1.9.3 と 1.8.2 の比較) を試して、より安定した方を使用してください。ライブラリの新しいバージョンの方が効率的に記述される場合があります。

珍しいまたは不安定な PHP 拡張機能がある場合は、アップグレードしてみてください。メモリ リークが発生している可能性があります。

大きなファイルを扱っていて、単純に 1 行ずつ読み取ることができない場合は、ファイルを多数の小さなファイルに分割し、それらを個別に処理してみてください。不要な PHP 拡張機能を無効にします。

問題の領域で、大量のデータを含み、コードの後半で必要とされない変数の設定を解除します。

FROM: https://www.airpair.com/php/fatal-error-allowed-memory-size

于 2015-12-17T15:41:17.220 に答える