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