
PHPのセグメンテーション違反に対する例外処理について
再帰呼び出しのプログラム(error_seg.php)を作成し、Linuxのシェルで
$ php error_seg.php
と実行しました。
実行環境:
PHPのバージョン:5.2.10
Linuxのバージョン:2.6.18-164.15.1.el5 (mockbuild@builder16.centos.org) (gcc version 4.1.2 20080704 (Red Hat 4.1.2-46)) #1 SMP Wed Mar 17 11:37:14 EDT 2010
プログラムは下記の通りです。
<?php
$cnt=0;
function func(){
global $cnt;
$cnt++;
print $cnt . "回目の呼び出し\n";
func();
}
try{
func();
}catch(Exception $e){
echo "例外発生:" . $e->getMessage()."\n";
}
?>
※このプログラムは、
http://d.hatena.ne.jp/syonbori_tech/20090414/123 …
のサイトを参考にして作りました。
この結果、
1回目の呼び出し
2回目の呼び出し
・・・
26187回目の呼び出し
26188回目の呼び出し
セグメンテーション違反です
と表示され、セグメンテーション違反を再現させました。
※何回目でセグメンテーション違反が発生するかは、
その都度異なります。
プログラム中で、try-catchの例外処理を入れたのですが、
例外処理されないようです。セグメンテーション違反に対して
例外処理をすることはできないのでしょうか。
できるとすれば、どのように記述をすればよいでしょうか。
No.1ベストアンサー
- 回答日時:
PHPプログラムレベルの例外ではなくて、PHP自体が異常終了してしまっているのだと思いますので、PHPプログラム内で捕まえることは不可能です。
他の言語では、スタックの不足を事前検知して、プログラム内で例外を上げるものもあるようですが、PHPはスタックの不足を事前検知せず、不足した時点でPHPがこけるという事でしょう。
ご回答ありがとうございます。
PHPがインタプリタ型の言語であり、逐次実行することを考えると、確かにどうしようもなさそうですね。
No.2
- 回答日時:
スクリプト言語である PHP の場合では、あまり興味ない話ですね。
> ※何回目でセグメンテーション違反が発生するかは、
その都度異なります。
そらそうでしょ、注目すべきはネストの深さでなく、食いつぶしてる容量。
変数増やせばもっと早く落ちる。
容量や実行時間のリミットってセットしてますか?
最悪の事態に備えて、わざわざリミットまで用意してくれている。なんて親切な言語なんだろう。(リミットに頼り切るのもどうかと思うけど)
ちなみに try/catch は throw された例外を捕まえるためのもので、オブジェクト指向信者(皮肉が過ぎるか)のために PHP5 から導入された。
スクリプト言語でどうなんだろうねぇって思うけどね。finally ないし。
古くは、エラー処理のため set_error_handler などなど用意してくれている。もちろん、メモリが食いつぶされた状態ではどうしようも無いけど。
global なんて書くコードもいい加減うんざりだ。
あまり興味のないお話しに付き合って頂き、ありがとうございます。
こちらで提示したプログラムは意図的にエラーを発生させるために書いたものであると考えて頂ければと思います。
No1さんの解答へのお礼でも書きましたが、どうしようもなさそうですね。set_error_handler関数を使っても同様でしょう。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHP ページング データベース 1 2022/06/16 10:30
- PHP アップロード画像数でCSSを分けることに成功したのですが、画像の横に文字を並べることが出来ません。 3 2023/07/28 17:16
- PHP PHP MySql ページング 2 2022/09/20 06:38
- MySQL php テーブルを作れない 2 2022/11/17 18:22
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- JavaScript javascriptで変数を組み込みたい 2 2023/01/13 09:52
- PHP PHPプログラムの間違い 1 2022/10/06 14:33
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- PHP どうして送信されないのでしょうか? 1 2022/12/09 05:23
- JavaScript javascriptのちょっとした動作不良(原因は突き止めたのですが) 1 2023/06/15 19:58
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PHPで、自分で作った変数かどう...
-
プログラミング作業効率を上げ...
-
PHPを
-
PCと携帯サイトの自動振り分け...
-
PHPの検索エンジン
-
PHPでの再帰を用いたツリー構造...
-
データベースの内容を...
-
php.ini 繰り返してるのはなぜ...
-
smartyでホームページ上の画像...
-
PDOのlastInsertIDについて
-
PHPのコードがそのまま表示され...
-
PHPのif文でその処理を途中で抜...
-
FTPコマンドでディレクトリごと...
-
microSDの装着による連続待受時...
-
mb_convert_encodingについて
-
ダウンロードすると画像が壊れ...
-
php.iniのエンコーディングの設...
-
「クラウドにアップロード」」...
-
どのように読み込んでるのでし...
-
session_startでクッキー範囲を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
FORMタグを使わずに、POSTする...
-
eclipseのエラーの意味
-
グローバル変数
-
PHP関数で呼んだまま返って...
-
登録、削除、リスト、もう一つ...
-
phpのプログラミングについて質...
-
PHP5でMySQLを再起動させるプロ...
-
smartyでホームページ上の画像...
-
PHPプログラムの内部からPOSTす...
-
同じレス内に質問の キャッチボ...
-
フォルダ名が日本語の場合の文...
-
ここで言う空文字の意味とは?
-
動的なHTMLの書き換え
-
携帯電話のwebページでphpによ...
-
PHPをviコマンドでプログラムし...
-
VBおすすめ書籍
-
view_Ebook.phpについて
-
phpとCGIの関係がよくわからな...
-
MySQLのベースに書かれたプログ...
-
system関数でphpが動作しない
おすすめ情報