PHPを学習していく際に重要なことの一つに、デバッグを直す訓練をするということです。PHPでバグを直すことは結構大変です。今回は、バグを見つける方法について記述していきたいと思います。8月15日記事

目次





バグについて

プログラムがうまく動かない現象。 ほとんど(というよりほぼすべて)が人間による入力ミスです。 「パソコンがおかしい!というような思いこみをせず、自分が悪いというように思うようにしましょう。」というニュアンスのことがとある本に書かれていました。

echo,print関数を利用して、変数に格納されている情報を見る。

変数を使いまわしていたり、関数を利用して計算していたりすると、この変数にはどういうものが入っているのだろうか。と確認する必要があるということです。

例:曜日番号を取得させるプログラム

<?php
//日付を表示させる
header("Content-Type: text/html; charset=UTF-8");

$y = 2015;
$m = 8;

$wdl = date("w", mktime(0, 0, 0, $m, 1, $y));//タイムスタンプを取得して 曜日番号を取得する
/*

このあと様々なプログラムを書いていったとする・・・。でもwdlにどういう値がはいっているのかわからない。

*/

//例えば2015年8月は何曜日からはじまるかを書いた場合。
//$wdlに関数を通じて何か値や文字列が取得されたのだから、どんなものが入っているのかを確認する。
echo $wdl."<br>";
//または
print $wdl."<br>";
//というように記述する。
//echo $wdl."<br>"; 確認し終わったらこのようにコメントアウトしておく。またバグがあったときにすぐ呼び出せるので便利


?>

SQL文と絡み合う場合、sqlコマンドをechoなどで出力して、その結果をphpmyadminかコンソールからSQLコマンドを入力して結果を確かめることも一つの手です。



元書いたコードを複製し、片一方をコメントアウトする。

長いコードを1行に書いていったりして、そのコードを色々といじると、元のコードがなんだかわからなくなってしまいます。そんな中、元のコードを改変したい場合、そのバックアップをとるのにコメントアウトを利用します。

例:if文とかfor文で長い表記がある場合

<?php
if(preg_match("/^(https?|ftp)(:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)/",$url)){
	echo "正しいURLです。<br>";
}else{
	echo "間違いなURLです<br>";
}
//これを次のように変えてちょこちょこいじる。
if(preg_match("/^(https?)なんちゃら~~~といじる",$url)){
//if(preg_match("/^(https?|ftp)(:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)/",$uri)){
	echo "正しいURLです。<br>";
}else{
	echo "間違いなURLです<br>";
}
?>

バックアップ代わりにもなって便利です。複数にわたってコメントアウトしたい場合は/* */を利用するといいと思います。次はPHPでバグの直し方、デバッグの仕方2です。

以上

最終更新:2015年08月25日 21:29