スキップしてメイン コンテンツに移動

PHPだからと言って

今ね、先行してリリースしたプロジェクトから資産を引き継いで、よく似たシステム作ってる。

LAMPで。



「さーて、.htaccess置いて、エラーメッセージを画面に表示....」



ってやったらさ、


出るわ出るわ...



Notice: Undefined variable

Notice: Undefined index

Notice: Undefined offset


の嵐。



おいぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃぃ



「またやってるよ。ほんとに進歩がない」



変数ないんだろ?

配列の範囲超えてるんだろ?


よくそんな状態で「テストしました。リリースします」って言えるよ....


あきれてものも言えない。



変数を宣言してないとか、範囲チェックしていないとか、キーチェックしていないとか、あり得ない。


PHP使ってんだから、それぐらいやれよ。




明らかに、不正な値を使ってるだろ、これじゃ。




というわけで、こんな文句を他の社員から言われないように、

こんな感じの.htaccess を開発環境ディレクトリの直下において開発しましょう。



■PHP 5.3.x で E_STRICT エラーも表示させる場合の .htaccess

php_flag display_errors On
php_value error_reporting 32767



PHP 5.3.x 以前の E_ALL には E_STRICT は含まれていない。

バージョンE_ALLの値E_STRICTの値
5.3.x307192048
5.2.x61432048
5.1以前20472048

そのため、全てのエラーを表示したければ、各バージョンのE_ALL値とE_STRICT値の合計を error_reporting の値とすればいい。



なお、PHP 5.4.x は、E_ALL (32767) に E_STRICT も含まれているので、PHP 5.3.x 用に作った .htaccess はそのまま使える。


コメント

このブログの人気の投稿

Chatの「メッセージは投稿者によって削除されました」を非表示にする方法

Chrome拡張機能を自作してやってみよう! ♪できるかな できるかな ・・・ 無理ぽ (´・ω・`) iframeの中に、実際のメッセージのやり取りが表示されるので、 $(function(){ $('iframe[name^="spareFrame"]').contents().find('[data-is-tombstoned="true"]').hide(); }); って書いたけど An iframe which has both allow-scripts and allow-same-origin for its sandbox attribute can escape its sandboxing. って言われてダメだったよ・・・

cron で実行されたコマンドから出力されたメッセージをメールで送信する方法

本題に入る前に、まずは、sh/bash系のシェルで標準出力と標準エラー出力をリダイレクトする方法から。 現在使用中のシェルを確認するには、 # echo $SHELL とすれば確認できる。 その他、利用できるシェルを確認するには # cat /etc/shells とする。 ■リダイレクトについて commandコマンドが出力を伴うコマンドの場合、commandコマンドの出力をresult.txtへ出力するには # command > result.txt コマンドの実効結果を別のコマンドの入力値とする場合は、|(パイプ)でつなげる。 # command1 | command2 ■標準出力と標準エラー出力について ・標準出力 正常結果やコマンド実行途中に出力されるメッセージの出力先。 ・標準エラー出力 異常終了時のメッセージやエラーメッセージなど、ユーザーに気づいてほしいメッセージの出力先。 ■標準出力と標準エラー出力の両方をリダイレクトする 先のcommandコマンドのリダイレクト例のうち、result.txtへのリダイレクトは、標準出力をリダイレクトしている。そのため、標準エラー出力はリダイレクトされず、仮にcommandコマンドが標準エラー出力へメッセージを出力した場合は、result.txtではなくコンソールへ出力(表示)される。 標準出力と標準エラー出力の両方をリダイレクトして、result.txtへ出力するには、 # command > result.txt 2>&1 とする。 なお、上の例を省略なしで記述すると # command 1> result.txt 2>&1 となる。 この「1」「2」の番号について。 ・1:標準出力。通常はコンソール画面。 ・2:標準エラー出力。通常はコンソール画面。 となっている。 ちなみに、「0」は「標準入力」。通常はキーボードからの入力。 例:標準エラー出力を error.log へ出力する。標準出力はコンソールへ表示する。 # command 2> error.log 例:標準出力は result.log 、標準エラー出力は error.log へ...

PHPで外部サーバーにあるファイルをincludeする

別サーバーにあるPHPソースをinclude()したときに調査した結果を書いておく。 話を簡単にしたいので、ソースはあくまでサンプルで。 呼び出し元 http://www.example.dom/test.php 別サーバー http://lib.example.dom/ includeしたいファイル http://lib.example.dom/hoge.php <? class person() { public $name; public $addr; public $age; function __construct() { $this->name = ""; $this->addr = ""; $this->age = ""; } } $o_person = new person(); $o_person->name = "hogehoge"; ?> 呼び出し元のソース <? include 'http://lib.example.dom/hoge.php'; echo "o_person = "; var_export($o_person); ?> で、結果はこうなる。 o_person = NULL 外部ファイルを拡張子「.php」のままincludeすると、外部ファイルでphpが「実行」されその「結果」が返される。 そのため、変数$o_personは別サーバー上にしか存在しえない。 PHPのソースとしてincludeしたいため、「結果」として「ソース」が返ってくればよい。 ということで、外部ファイルの拡張子を「.php」から「.inc」に変えたら、見事成功! 呼び出し元のソース <? include 'http://lib.example.dom/hoge.inc'; // hoge.php を hoge.inc に変更。これで、呼び出し先の外部サーバーでPHPとして実行されなくなる。 echo...