dポイントプレゼントキャンペーン実施中!

PHPで処理中にメモリ不足になった場合、下記のようなエラーが起こるかと思います。
「Fatal error: Allowed memory size of xxxxx bytes exhausted (tried to allocate 16 bytes) in …」

ここで質問させて頂きたいのですが、
予めメモリ不足が起きる可能性がある処理を、tryなどで囲んでおき、実際にメモリ不足が起きた際は、その処理を飛ばし、それ以降の処理を実行させるといったことは可能でしょうか。
それとも、やはりメモリ不足でエラーが起きているので、その後の処理を実行させるといったことは出来ないのでしょうか。

もし何か方法などございましたら、ご教授頂けると助かります。
また、質問に不備な点などありましたら、ご指摘お願いします。

よろしくお願いします。

A 回答 (4件)

http://php.net/manual/ja/function.win32-ps-stat- …
メモリの容量や残容量をウオッチして、足りなくなりそうになったら処理を実行しないロジックを追加
    • good
    • 0
この回答へのお礼

そのような方法があったのですね。参考にさせて頂きます。
ありがとうございます。

お礼日時:2015/01/07 15:55

多くのエラーはset_error_handler関数でErrorExceptionに変換することが出来ますが…↓


http://php.net/manual/ja/class.errorexception.ph …

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
    • good
    • 0
この回答へのお礼

やはり不可能なのですね。
丁寧に教えて頂きありがとうございます。

お礼日時:2015/01/07 15:55

メモリー関係のエラーはtry~catchで捕らえられなかったはずなので、メモリリミットを増やすしかないでしょう。

    • good
    • 0
この回答へのお礼

やはりリミットを増やすというのが一般的なのですかね。
ありがとうございます。

お礼日時:2015/01/07 15:54

>実際にメモリ不足が起きた際は、その処理を飛ばし、それ以降の処理を実行させる



メモリ不足が起きている状況によります。
すくなくともその後の処理をしたとしても上流の処理でひっかかっているなら
そのあとの整合性は確保されていないと思うので、やるだけ無駄だとは思うので
やるとすると原状復帰処理でしょう

メモリ不足がおきるのはよほど計画性のないプログラミングなので
メモリ不足がおきないような対策を立てるのが一般的ですが
    • good
    • 0
この回答へのお礼

メモリ不足を起こさないようにするのが第一ですね。
ありがとうございます。

お礼日時:2015/01/07 15:54

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!