apacheで動いている状態で、エラーは出ていないが動作がおかしい時(WEBアプリ以外ならデバッガーでステップ実行したり、変数をwatchするような時)のデバッグ方法を教えてください。
※多分ログ出力でやるのではないかと思いますが、その場合のログ出力の記法と出力先が知りたいです。
Loggerを実装するのが普通かと。
それか、ライブラリを利用しましょう。
Log4PHP@ Apache
とか
log4pなど。
あとは、デバグモジュールならブレークポイントが使えます。
eclipseと連携できたりします。
私はEclipseプロジェクトの1つである、PHP Development Tools framework for the Eclipse(PDT)を使っています。
こいつはPHPの統合開発環境であり、PHPを動作させるサーバと連携して、リモートデバッグを行うことができます。
その他の機能も申し分なく、過去にEclipseを使ったことある人なら、難なく移行できると思います。
http://yosaku2005.spaces.live.com/blog/cns!EC4147A83A01AE21!347.entry
http://hp.vector.co.jp/authors/VA000137/phpide/qanda.html
と、開発環境が変わるので最初は大変かと思いますが...
これを使わないで簡単にデバッグするときは、下のコメントでもいわれているように、いわゆるprintfデバッグっぽいことをしてます。
WEBページの各所に変数をprintなりvar_dumpなりで吐き出させて変数の流れを追ってます。
ありがとうございます。
PHP用のリモートデバッガがあるんですね。
Eclipseは試しにさわったことがあるくらいであまり使ったことはありません。
デバッガがあれば便利ですが、そこまで凝ったことをやるわけではなく
>WEBページの各所に変数をprintなりvar_dumpなりで吐き出させて変数の流れを追ってます。
このくらいが出来れば十分です。
phpのデバッグ環境は幾つかある様です。
http://itpro.nikkeibp.co.jp/members/ITPro/oss/20041007/150995/?P...
http://journal.mycom.co.jp/column/ide/006/index.html
エラーログを出力する方法や、エラーを発生させたりなどの諸々も
出来る様です。
http://www.php.net/manual/ja/ref.errorfunc.php#ini.error-log
display_errors, display_startup_errors を有効にして、ブラウザ上でエラーメッセージを得るのはいつもやっています。(社内システムは本番でも有効のままにしているものもあります。)
個人的にはデバッガを使わなければならない程のシステムは扱っていないので、専ら var_dump() です。
画面表示が乱れる事もお構いなしに単純に表示されています。
出力サイズが膨大になる場合などはファイルに出力する場合もありますが。
(因に、var_dump() は無条件で画面に出力してくれます。後でまとめて書き出す場合や、ファイルに書き出す場合は var_export() を使います。)
ありがとうございます。
var_dump() を使ってみました。
(index.phpで最初に変数が出るところに入れてみました)
$_POST = strings_stripSlashes($_POST); $login = isset($_POST['login']) ? $_POST['login'] : null; $pwd = isset($_POST['password']) ? $_POST['password'] : null; error_log(print_r($_POST), 3, 'c:\temp\error.log'); var_dump($_POST);
値を表示したページを開いて止まるみたいですね。
例 NULL とだけ表示したページがでる。
BreakPoint風にどこかで止めてデバッグするときはvar_dump()
動かしながらLOGで確認するときはerr_log()で出来そうですね。
インタープリタが出すメッセージを読めば、ほとんどのことがわかると思います。設定としてはこんな感じで。
error_reporting = E_ALL & ~E_NOTICE
display_errors = On
display_startup_errors = On
本番のときは、
display_errors = Off
log_errors = On
error_log = /hoge/php_error.log
ただし、parse error(構文がおかしい)などは、表示される行番号(line)を見てもどこがエラーかわからない場合があります。例えば、単純に{を閉じ忘れた場合です。専用のエディタや開発環境を利用すれば、そのへんが書いている途中でわかります。
情報ありがとうございます。
xxxatsxxxさん、こんにちは。
>Loggerを実装するのが普通かと。
ありがとうございます。
「PHP Logger」で検索すると以下のサイトがありました。
http://labs.unoh.net/2007/05/php-logging-to-text-files.html
error_log関数が使いやすそうです。