
PHPで処理中にメモリ不足になった場合、下記のようなエラーが起こるかと思います。
「Fatal error: Allowed memory size of xxxxx bytes exhausted (tried to allocate 16 bytes) in …」
ここで質問させて頂きたいのですが、
予めメモリ不足が起きる可能性がある処理を、tryなどで囲んでおき、実際にメモリ不足が起きた際は、その処理を飛ばし、それ以降の処理を実行させるといったことは可能でしょうか。
それとも、やはりメモリ不足でエラーが起きているので、その後の処理を実行させるといったことは出来ないのでしょうか。
もし何か方法などございましたら、ご教授頂けると助かります。
また、質問に不備な点などありましたら、ご指摘お願いします。
よろしくお願いします。
No.3ベストアンサー
- 回答日時:
メモリの容量や残容量をウオッチして、足りなくなりそうになったら処理を実行しないロジックを追加
No.4
- 回答日時:
多くのエラーは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
No.1
- 回答日時:
>実際にメモリ不足が起きた際は、その処理を飛ばし、それ以降の処理を実行させる
メモリ不足が起きている状況によります。
すくなくともその後の処理をしたとしても上流の処理でひっかかっているなら
そのあとの整合性は確保されていないと思うので、やるだけ無駄だとは思うので
やるとすると原状復帰処理でしょう
メモリ不足がおきるのはよほど計画性のないプログラミングなので
メモリ不足がおきないような対策を立てるのが一般的ですが
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【C#】Page_Loadさせない方法に...
-
private subモジュールを他のモ...
-
【C#/Java?】try-catchでcatch...
-
シグナル 6(SIGABRT)とは?
-
StatusStripの表示が更新されな...
-
COBOL OCCURSで指定したデータ...
-
vbaのエラー対応(実行時エラー...
-
ExcelのVBAで、選択したファイ...
-
どうやってもFor文を抜けてしま...
-
特定の名前のオートシェイプの...
-
順番に処理させたい
-
非アクティブシートでの For Ea...
-
フォルダのアクセス権確認について
-
エクセル画面のちらつきなくす...
-
エクセルVBAでロックをかけたい
-
ASP.NETで特定のページだけ文字...
-
winsockの非同期処理について
-
【VBA】エラー処理で別プロシー...
-
バッチファイルでのエラー処理...
-
For ~ Next文
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【C#/Java?】try-catchでcatch...
-
private subモジュールを他のモ...
-
vbaのエラー対応(実行時エラー...
-
シグナル 6(SIGABRT)とは?
-
IF文に時間(何時から何時ま...
-
マクロで、次のコードへ行く前...
-
Excel VBA セルの名前があるか...
-
どう増強すべきか
-
特定の名前のオートシェイプの...
-
途中で処理を中断させたい (ア...
-
特定のファイルを他のプロセス...
-
順番に処理させたい
-
Word VBA。各マクロの間に待ち...
-
StatusStripの表示が更新されな...
-
ドリブン??
-
ExcelのVBAで、選択したファイ...
-
RaiseEventのメリット
-
【VBA】エラー処理で別プロシー...
-
エクセルVBAでロックをかけたい
-
どうやってもFor文を抜けてしま...
おすすめ情報