• ベストアンサー

エラー処理について

$fp = fopen($logfile, "r+") or die("File Open Error!\n"); 上記のコードの方法で、エラー文字の装飾をしたいです。 die関数が言語構造なので、やはりif else的な処理で分けechoなどで表示する方法しかないでしょうか? $fp = fopen($logfile, "r+") or die("<p><font size=7 color=#00ff00>File Open Error!</font></p>");

質問者が選んだベストアンサー

  • ベストアンサー
noname#244856
noname#244856
回答No.2

予備知識: ファイルオープンモードに関して http://qiita.com/mpyw/items/3adcec3c66e515895b08 【ダメな例】 <!DOCTYPE html> <head> <meta charset="utf-8"> </head> <body> COUNT: <?php $fp = @fopen('counter.dat', 'a+b') or die('FILE OPEN ERROR'); flock($fp, LOCK_EX); echo $count = stream_get_contents($fp) + 1; ftruncate($fp, 0); rewind($fp); fwrite($fp, $count); fclose($fp); ?> </body> </html> エラー時にここでぶった切られちゃう↓ <!DOCTYPE html> <head> <meta charset="utf-8"> </head> <body> COUNT: FILE OPEN ERROR 【望ましい例1 (自前でRuntimeExceptionをスロー)】 [PHPコード] <?php try {    if (!$fp = @fopen('counter.dat', 'a+b')) {   throw new RuntimeException('FILE OPEN ERROR');  }  flock($fp, LOCK_EX);  $count = stream_get_contents($fp) + 1;  ftruncate($fp, 0);  rewind($fp);  fwrite($fp, $count);  fclose($fp); } catch (Exception $e) {    $error = $e->getMesage();   } header('Content-Type: text/html; charset=utf-8'); ?> <!DOCTYPE html> <head> </head> <body> <?php if (isset($error)): ?> <p>ERROR: <?php echo $error ?></p> <?php else: ?> <p>COUNT: <?php echo $count ?></p> <?php endif; ?> </body> </html> 【望ましい例2 (ErrorExceptionを利用、やや手抜き)】 [PHPコード] <?php set_error_handler(function ($errno, $errstr, $errfile, $errline) {  throw new ErrorException($errstr, 0, $errno, $errfile, $errline); }); try {    $fp = fopen('counter.dat', 'a+b');  flock($fp, LOCK_EX);  $count = stream_get_contents($fp) + 1;  ftruncate($fp, 0);  rewind($fp);  fwrite($fp, $count);  fclose($fp); } catch (Exception $e) {    $error = $e->getMesage();   } header('Content-Type: text/html; charset=utf-8'); ?> <!DOCTYPE html> <head> </head> <body> <?php if (isset($error)): ?> <p>ERROR: <?php echo $error ?></p> <?php else: ?> <p>COUNT: <?php echo $count ?></p> <?php endif; ?> </body> </html>

その他の回答 (1)

  • agunuz
  • ベストアンサー率65% (288/438)
回答No.1

dieで止めるということは、それ以降は何もブラウザに返せません。span要素などで括ってstyleを書くのはかまいませんが、いずれにしてもbody要素やhtml要素まで閉じることを考えたら面倒なだけだと思います。 正直、例外を投げて後処理をするとかの方がスッキリ書けると思います。 「dieで止める」というのは『どうやってもこのまま動かすことが出来ない』状態だけです。一般の閲覧者が見ることはあり得ないハズです(もしあるとしたら「異常事態」です)。装飾どうのこうのという段階ではないと思います。

関連するQ&A