症状
PHP プログラムを実行すると、通常、「致命的エラー: 許容メモリ サイズ xxxxxx バイトを使い果たしました」というエラーが発生します。これは、PHP スクリプトがメモリを使用しすぎて制限を超えていることを意味します。システムによって設定された最大許容メモリ。
この問題を解決するには、まずプログラムが過剰なメモリを割り当てているかどうかを確認する必要があります。プログラムに問題がない場合は、次の方法で PHP のメモリ制限 (memory_limit) を増やすことができます。
php のメモリ制限値を確認する
この値を確認するには、view-php-info.php などの空の php ファイルを作成する必要があります。次に、その中にコードを貼り付けます。
<?php phpinfo(); ?>
このスクリプトを Web サーバーに置き、ブラウザで呼び出します。現時点では、以下に示すように、PHP 環境設定に関する情報を確認できます。その一部は「memory_limit」に関するものです:
注: このメソッドを使用して、memory_limit だけでなく、php の他のパラメータ設定を表示することもできます
memory_limit は何に設定する必要がありますか?
これはアプリケーションの要件に完全に依存します。たとえば、WordPress ではコア コードを実行するために 32MB が必要です。 Drupal 6 では、この値が少なくとも 16MB である必要があり、32MB に設定することをお勧めします。多数のプラグイン、特に画像処理を必要とするプラグインをインストールする場合は、128MB 以上のメモリが必要になる場合があります。
memory_limit の設定方法
方法 1: php.ini
最も簡単または最も一般的な方法は、php.ini
を変更することです 1. まず、自分の環境に効果的な php.ini ファイルを見つけます。 Web サイトにはさまざまな場所で PHP パラメータを設定できるため、正しい設定ファイルを見つけて変更を加えることが最初のステップです。上記の方法で php ファイルを作成し、その構成パラメータを表示すると、「ロードされた構成ファイル」項目が表示されます。例を次に示します。 Linux ユーザーの場合は、「php -i」を実行できます。 | grep ロードされた設定ファイル」を実行して、対応する設定ファイルを見つけます。 Windows ユーザーの場合は、php インストール ディレクトリ内の php.ini を変更してみてください。
memory_limit = 128M; 128M を任意の値に変更できます
ファイルを保存します
3. Web サーバーが Apache を使用している場合は、次のコマンドを実行します。
httpd restart
場合によっては、php.ini を非公開で変更することが許可されない場合があります。たとえば、仮想ホスティング サービスを購入したが、サービス プロバイダーがこのファイルの変更を許可していない場合です。次に、memory_limit の値を増やすための他の方法を検討することをお勧めします。
注: このメソッドは、php が Apache モジュールとして実行される場合にのみ有効です。 Web サイトのルート ディレクトリで「.htaccess」ファイルを見つけます。ファイルがない場合は、自分で作成できます。次に、次の設定をそれに入れます
php_valuememory_limit 128M; 128M を設定したい値に変更できます
方法 3: 実行時に php のメモリ設定を変更します
ini_set('memory_limit','128M');
Memory_limit の変更に失敗しました
仮想ホストを使用している場合、memory_limit の値の変更に失敗する可能性があります。これに対処する方法については、サービス プロバイダーに問い合わせる必要があります。通常、サービス プロバイダーでは設定できる最大値が制限されているか、まったく変更できません。その環境が本当に要件を満たせない場合は、別のホスティング プロバイダーへの変更を検討することをお勧めします。 ++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++
本番環境でのトラブルシューティングの例
現象の説明:
本番環境ではサービスがありませんPHP スクリプトの実行中に、(スクリプトの内容には 5000 個のファイルのフェッチが含まれています) ことがわかりました。ローカル テストでは速度が非常に遅くなり、サーバー負荷の問題、データベースの問題、サーバー ネットワークの問題をトラブルシューティングして解決した後、数分で完了した作業が 2 時間以上かかりました。 php.ini 設定ファイルのリソース制限が原因かと思い、memory_limit のデフォルト値を 128M から 1024M に変更して元のスクリプトを再実行したところ、大幅に速度が向上しました。このパラメータの意味。
変更を加えた後、再起動する必要がありますか?
PHP にはデーモンがないため、理論上、変更を加えれば新しい設定ファイルがすぐに使用されます。
この値はどれくらいの大きさにすべきでしょうか?
アプリケーションの要件に応じて設定することをお勧めします。物理サーバーの場合、メモリが十分に大きい場合は、メモリを 512M または 1024M などのより大きなサイズに制限することをお勧めします。VPS の場合は、128 (デフォルト) または 64M 以下に制限される場合があります。特に複数の php fast-cgi が有効になっている場合、サーバーが停止する可能性があります。
パラメータ構文
memory_limit integer
このコマンドは、スクリプトが適用できるメモリの最大バイト数を設定します。
コマンド効果
これは、不適切に書かれたスクリプトがサーバー上の利用可能なメモリをすべて消費するのを防ぐのに役立ちます。
phpchina フォーラムで、誰かが次のように言いました:
Memory_limit は、PHP がメモリを使用するときにスペースを設定するためのもので、通常はメモリの 4 分の 1 に設定されており、これで十分です。たとえば、512M メモリは 128M に設定され、1G メモリは 256M に設定されます。
システム、データベース、その他のプログラムもメモリ領域を必要とするため、設定が大きすぎるとシステムの速度に影響します。通常、システムとデータベースのメモリ領域は独自に割り当てられます。
3つの修正方法を添付します
単語分割プログラムに問題がある可能性があります。検索フィールドが漢字 10 文字を超えると、次のようなエラーが表示されます
致命的なエラー: 許容メモリ サイズ 2345643 バイトが使い果たされました
オンラインで解決策を見つけました。方法は3つあります。
1. PHP.INI を直接変更します
memory_limit = 16M ;
しかし、私の変更は役に立ちません。サーバーを再起動する必要があると言われています。しかし明らかに。私の場合は仮想ホストです。したがって、独立したホストがある場合は、次のように変更できます。
2. .htaccess
を変更しますphp_valuememory_limit 16M
変更直後は500エラーが表示されます。ホストプロバイダーによって制限されている可能性があります
3. プログラムページで直接変更します。
ini_set('memory_limit', '16M');