web-dev-qa-db-ja.com

Xバイトの許容メモリサイズを使い果たしました

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

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

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

39
Nathan

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

  1. マスターシステム_php.ini_(通常/ etcのどこかに)
  2. apacheの設定のどこか(httpd.confまたはサイトごとの.confファイル、_php_value_経由)
  3. CLIとCGIは異なる_php.ini_を持つことができます(CLI confを確認するには、コマンド_php -i | grep memory_limit_を使用します)
  4. ローカル.htaccessファイル(_php_value_も)
  5. スクリプト内(ini_set()経由)

PHPinfoの出力では、「マスター」値はコンパイルされたデフォルト値であり、「ローカル」値は実際に有効な値です。デフォルトから変更しないか、上記のいずれかの場所で上書きできます。

また、PHPには通常、コマンドライン操作とWebサーバーベースの操作用に異なる.iniファイルがあります。コマンドラインからphpinfo()をチェックすると、 Webベースのスクリプトで実行します。

36
Marc B
ini_set('memory_limit', '128M'); 

または

php.ini  =>  memory_limit = 128M

または

php_value memory_limit 128M
23
şarkı dinle

同じ問題がありました。私は答えを見つけました:

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

注:サーバーのメモリ使用量に制限はありません。

更新: PHPスクリプトが過剰な量のメモリを使用し始めて、多くのスワップ領域を使用する場合、システムの速度が低下する可能性があるため、慎重に使用してください。プログラムが多くのメモリを必要とせず、現在設定する量がわからない場合に使用しますが、そのプログラムに必要なメモリ量は最終的にわかります。

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

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

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

15
Somnath Muluk

メモリは複数の場所で構成する必要があります。
memory_limitを512Mに設定します。

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の問題を解決する必要があります

5
oussaka

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

3
bcosca
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
2
terwxqian

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

ファイルを読み込んでいる場合は、ファイル全体をメモリに読み込むのではなく、行ごとに読み込みます。 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

1
user3806549

この問題は、php.iniで定義された制限がなくなったために発生しますが、これには多くの解決策がありますが、簡単な方法は、ローカルサーバーフォルダーを見つけ、その上にphpフォルダーを見つけ、そのフォルダーにすべての宣言を持つphp.iniファイルがあることですこれらのタイプのセットアップ。必要なものを見つけて、その値を変更するだけです。しかし、この状況では、localhostファイルを変更すると大きな問題が1つありますが、サーバーにサイトを置きたい場合はサーバーについては同じ問題が再び発生し、サーバーについても同じことを繰り返します。しかし、.htaccessファイルについても知っています。これは、コアファイルを変更せずに多くのことを行うための最良かつ単一の場所の1つです。 wwwルーティングを変更するように、URLから.phpまたはその他の拡張子を削除するか、URLを追加します。 php.iniのデフォルト値も次のように定義します。最初にルートディレクトリから.htaccessファイルを開くか、このファイルがない場合はサイトのルートディレクトリに作成して貼り付けます。それのコード-

php_value upload_max_filesize 1000M
php_value post_max_size 99500M
php_value memory_limit 500M
php_value max_execution_time 300

変更後、変更を確認する場合は、PHPコードを実行するだけです。

<?php phpinfo(); ?> 

pHPのすべての詳細が表示されます。だからあなたはあなたの変更を見つけます。

注:無制限を定義するには、php_value memory_limit -1のように-1を追加するだけです。これは適切ではなく、ほとんどの場合、サーバーの速度が低下します。ただし、制限を減らしたい場合は、この1つのオプションも適しています。更新後にページの変更が反映されない場合は、変更のためにローカルサーバーを1回再起動する必要があります。

がんばろう。それが役立つことを願っています。 。htaccessファイルをダウンロードするには、これをクリックしてください。

0