デバッグし易くしよう! 3: デバッグ時と本番運用時の処理を簡単に切り替える
Step1で、デバッグ用にかなり沢山のecho文を追加しましたが、本番時には無用の長物。しかしながらプログラムの変更を行ったりする場合には、やはり表示できた方が便利。ここでは、定数の値を変更することで、デバッグ用の処理を実行するかどうかを簡単に切り替える方法を説明します。
Step3 デバッグ/運用モードの簡単切り替え
ここではdefine関数(マニュアル)を利用する方法をご紹介します。
まず、define関数で、デバッグモードであるか否かを識別するための定数を定義します。
define('DEBUG', TRUE);
デバッグ時にのみ行いたい処理が 定数DEBUG=TRUEの場合にのみ実行されるようにコードを書きなおします。
if (DEBUG) { デバッグ処理 };
運用時には、最初のdefineの部分を書き変えて定数DEBUG=FALSEとしれば、デバッグ用のコードは実行されません。
define('DEBUG', FALSE);
参考までに、サンプルコードをこれを利用して書き直すと次の通りになります。
<?php //DEBUG処理の切り替え 本番運用時にはFALSEに変更すること define('DEBUG', TRUE); //デバッグ時 //define('DEBUG', FALSE); //本番運用時 //エラー表示レベル制御 デバッグ時:E_ALL, 本番運用時:0 if(DEBUG) { error_reporting(E_ALL); } else{ error_reporting(0); } if (DEBUG) { echo "プログラム開始<br>";} //ユーザー名、パスワード $username='Twitterユーザ‐名'; $password='Twitterパスワード'; if (DEBUG) { echo " ユーザー名、パスワードセット完了<br>"; } $message='投稿テストメッセージ !!'; if (DEBUG) { echo " 投稿メッセージのをセット完了<br>"; } $ret= tweet_fop($message, $username, $password); if (DEBUG) { echo "プログラム終了<br>"; } exit(); //fopenを利用したtweet function function tweet_fop($message, $username, $password) { if (DEBUG) { echo " 関数tweet_fop:START<br>"; } $url = "http://twitter.com/statuses/update.json?"; $params = "status=". rawurlencode($message); $st = stream_context_create(array( "http" => array( "method" => "POST", "header" => "Authorization: Basic ". base64_encode($username. ":". $password) ) )); if (DEBUG) { echo " fopen実行<br>"; } if(($fp = fopen($url.$params, 'r', false, $st)) == false){ if (DEBUG) { echo " fopen 失敗のため 関数tweet_fopから戻る<br>"; } return(false); } if (DEBUG) { echo " fopen成功<br>"; } $contents=stream_get_contents($fp); if (DEBUG) { echo " fclose実行<br>";} fclose($fp); if (DEBUG) { echo " 関数tweet_fop:END<br>"; } return ($contents); } ?>
若干、鬱陶しい感じのコードではありますが・・・最終的にはもう少しスマートに書ける方法をご紹介できる予定