人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHPをデバッグする方法を教えてください


apacheで動いている状態で、エラーは出ていないが動作がおかしい時(WEBアプリ以外ならデバッガーでステップ実行したり、変数をwatchするような時)のデバッグ方法を教えてください。


※多分ログ出力でやるのではないかと思いますが、その場合のログ出力の記法と出力先が知りたいです。

●質問者: garyo
●カテゴリ:インターネット ウェブ制作
✍キーワード:Apache PHP Web アプリ エラー
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● xxxatsxxx
●23ポイント

Loggerを実装するのが普通かと。

それか、ライブラリを利用しましょう。

Log4PHP@ Apache

とか

log4pなど。

あとは、デバグモジュールならブレークポイントが使えます。

http://dd.cron.ru/dbg/

eclipseと連携できたりします。

◎質問者からの返答

xxxatsxxxさん、こんにちは。

>Loggerを実装するのが普通かと。

ありがとうございます。

「PHP Logger」で検索すると以下のサイトがありました。

http://labs.unoh.net/2007/05/php-logging-to-text-files.html

error_log関数が使いやすそうです。


2 ● noname
●23ポイント

私はEclipseプロジェクトの1つである、PHP Development Tools framework for the Eclipse(PDT)を使っています。

http://www.eclipse.org/pdt/

こいつはPHPの統合開発環境であり、PHPを動作させるサーバと連携して、リモートデバッグを行うことができます。

その他の機能も申し分なく、過去にEclipseを使ったことある人なら、難なく移行できると思います。

http://blog.cles.jp/item/2005

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なりで吐き出させて変数の流れを追ってます。

このくらいが出来れば十分です。


3 ● tezcello
●22ポイント

phpのデバッグ環境は幾つかある様です。

http://itpro.nikkeibp.co.jp/members/ITPro/oss/20041007/150995/?P...

http://journal.mycom.co.jp/column/ide/006/index.html

http://www.asial.co.jp/vsphp/


エラーログを出力する方法や、エラーを発生させたりなどの諸々も

出来る様です。

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()で出来そうですね。


4 ● Yota
●22ポイント

インタープリタが出すメッセージを読めば、ほとんどのことがわかると思います。設定としてはこんな感じで。

PHP: エラー処理およびログ記録関数 - Manual

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)を見てもどこがエラーかわからない場合があります。例えば、単純に{を閉じ忘れた場合です。専用のエディタや開発環境を利用すれば、そのへんが書いている途中でわかります。

◎質問者からの返答

情報ありがとうございます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ