- ベストアンサー
メモリ不足時の処理方法について
- 質問文章からセンセーショナルなタイトルを30文字前後で生成しました。メモリ不足時の処理方法について質問させて頂きたいです。
- PHPで処理中にメモリ不足になった場合、エラーが発生します。メモリ不足が起きる可能性のある処理をtryなどで囲んでおき、実際にメモリ不足が起きた際はその処理を飛ばし、それ以降の処理を実行することは可能ですか?
- もし方法などがあれば教えてください。また、質問に不備な点があればご指摘ください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
http://php.net/manual/ja/function.win32-ps-stat-mem.php メモリの容量や残容量をウオッチして、足りなくなりそうになったら処理を実行しないロジックを追加
その他の回答 (3)
多くのエラーはset_error_handler関数でErrorExceptionに変換することが出来ますが…↓ http://php.net/manual/ja/class.errorexception.php#errorexception.examples FatalErrorとParseErrorだけは不可能です。register_shutdown_function関数でシャットダウン関数として処理を登録するしか方法はありません。 (但しParseErrorに関しては、文法エラーのある外部ファイルをrequire等で読み込んだ場合に限ります。メインのPHPファイル自体に文法エラーがあった場合、当然シャットダウン関数は実行されません。) register_shutdown_function(function () { ....$error = error_get_last(); ....if ($error['type'] & (E_ERROR | E_USER_ERROR | E_CORE_ERROR | E_PARSE)) { ........何か致命的なエラーが起きた ....} }); ちなみにシャットダウン関数の中で再度致命的なエラーが起きた場合、そのまま何も行われずに終了します↓ http://ideone.com/KdsgXI
お礼
やはり不可能なのですね。 丁寧に教えて頂きありがとうございます。
- t_ohta
- ベストアンサー率38% (5238/13705)
メモリー関係のエラーはtry~catchで捕らえられなかったはずなので、メモリリミットを増やすしかないでしょう。
お礼
やはりリミットを増やすというのが一般的なのですかね。 ありがとうございます。
- yambejp
- ベストアンサー率51% (3827/7415)
>実際にメモリ不足が起きた際は、その処理を飛ばし、それ以降の処理を実行させる メモリ不足が起きている状況によります。 すくなくともその後の処理をしたとしても上流の処理でひっかかっているなら そのあとの整合性は確保されていないと思うので、やるだけ無駄だとは思うので やるとすると原状復帰処理でしょう メモリ不足がおきるのはよほど計画性のないプログラミングなので メモリ不足がおきないような対策を立てるのが一般的ですが
お礼
メモリ不足を起こさないようにするのが第一ですね。 ありがとうございます。
お礼
そのような方法があったのですね。参考にさせて頂きます。 ありがとうございます。