![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
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で質問しましょう!
似たような質問が見つかりました
- CPU・メモリ・マザーボード Windows11アップデート後の不具合(メモリ不足)について 9 2023/01/04 11:34
- Ruby 【メモリ不足で落ちる(python)】 1 2022/05/26 21:22
- CPU・メモリ・マザーボード メモリでのデータの処理についての質問です。 1 2023/05/04 23:53
- ノートパソコン 理系大学生向けおすすめパソコン 8 2023/01/01 20:07
- CPU・メモリ・マザーボード PCゲーム メモリ12GBで不足? 1 2022/10/17 14:14
- CPU・メモリ・マザーボード 「コンピューターのメモリが不足しています」と表示される2 7 2022/12/14 17:46
- デスクトップパソコン ん~…分からん 7 2022/06/10 10:47
- iPhone(アイフォーン) iCloudのデータをiPhoneメモリに移動したい 1 2022/10/24 22:11
- システム CPUの問題について 2 2022/07/09 12:04
- CPU・メモリ・マザーボード Ivy BridgeのPCでゲームのラグを減らしたい 6 2023/04/20 23:52
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【C#/Java?】try-catchでcatch...
-
IF文に時間(何時から何時ま...
-
マクロで、次のコードへ行く前...
-
シグナル 6(SIGABRT)とは?
-
private subモジュールを他のモ...
-
ExcelのVBAで、選択したファイ...
-
どうやってもFor文を抜けてしま...
-
VBAでBook読み込み時の非表示方...
-
vbaのエラー対応(実行時エラー...
-
途中で処理を中断させたい (ア...
-
VB.NET SPRED(チェックボック...
-
VB6にてネットワーク上にある共...
-
UWSCでの例外処理について
-
【C#】Page_Loadさせない方法に...
-
特定のファイルを他のプロセス...
-
Excel VBA セルの名前があるか...
-
ListViewから選択中の文字列を取得
-
LoadPicture のオートメーショ...
-
Word VBA。各マクロの間に待ち...
-
【Vb.net】プリンタジョブの取得
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【C#/Java?】try-catchでcatch...
-
IF文に時間(何時から何時ま...
-
private subモジュールを他のモ...
-
特定の名前のオートシェイプの...
-
vbaのエラー対応(実行時エラー...
-
iPhoneのニューラルエンジンっ...
-
マクロで、次のコードへ行く前...
-
ExcelのVBAで、選択したファイ...
-
どうやってもFor文を抜けてしま...
-
Excel VBA セルの名前があるか...
-
Functionで戻り値を複数返す方法
-
特定のファイルを他のプロセス...
-
シグナル 6(SIGABRT)とは?
-
【VBA】エラー処理で別プロシー...
-
エクセル VBAで複数セル選択時...
-
どう増強すべきか
-
Word VBA。各マクロの間に待ち...
-
シェルスクリプトでファイル内...
-
VBA 複数の行を高速で削除する...
-
【Vb.net】プリンタジョブの取得
おすすめ情報