web-dev-qa-db-ja.com

デバッグログを印刷するには?

いくつかのPHPコードをデバッグしたいのですが、ログを画面またはファイルに出力するのがいいと思います。

PHPコードでログを印刷するにはどうすればよいですか?

通常のprint/printfは、コンソールではなくHTML出力に送られるようです。

PHPコードを実行するApacheサーバーがあります。

114
eugene

あまり知られていないトリックは、mod_phpがstderrをApacheログにマップすることです。そして、そのためのストリームがあるので、file_put_contents('php://stderr', print_r($foo, TRUE))$fooの値をApacheエラーログにうまくダンプします。

177
chx
error_log(print_r($variable, TRUE)); 

役に立つかもしれません

126
Olivier Berger

error_log を使用して、サーバーにエラーログファイル(または、必要に応じてオプションのその他のファイル)を送信できます。

25
pthurlow

Linuxを使用している場合:

file_put_contents('your_log_file', 'your_content');

または

error_log ('your_content', 3, 'your_log_file');

そして、コンソールで

tail -f your_log_file

これにより、ファイルの最後の行が継続的に表示されます。

19
user3029507

あなたの心のフレームを変更する必要があります。あなたがPHPを書いているのは、あなたが書くことに慣れているということではありません。 PHPでのデバッグは、コンソール環境では行われません。

PHPには、デバッグソリューションの3つのカテゴリがあります。

  1. Webページへの出力(物事のより良いビューについては、dBugライブラリを参照)。
  2. ログファイルに書き込む
  3. XDebugを使用したセッションデバッグ

PHPを他の慣れ親しんだ言語のように振る舞わせるのではなく、それらを使用することを学んでください。

9
Sylverdrag

コンソールでデバッグしていますか? PHPのデバッグにはさまざまなオプションがあります。迅速でダーティなデバッグに使用される最も一般的な関数は var_dump です。

そうは言っても、邪魔にならないように、var_dumpは素晴らしく、多くの人がそれだけであらゆることをしますが、他にも ツールとテクニック があります。

Webページでデバッグする場合に役立つことは、ダンプステートメントの周りに<pre> </pre>タグをラップして、配列とオブジェクトの適切なフォーマットを提供することです。

すなわち:

<div> some html code ....
      <a href="<?php $tpl->link;?>">some link to test</a>
</div>

      dump $tpl like this:

    <pre><?php var_dump($tpl); ?></pre>

最後に、エラー処理のデバッグがエラーを表示するように設定されているかどうかを確認してください。サーバー構成にアクセスできない場合は、スクリプトの先頭にこれを追加する必要がある場合があります。

error_reporting(E_ALL);
ini_set('display_errors', '1');

がんばろう!

5
stefgosselin

Zend のようなフレームワークを統合したくない場合は、 trigger_error メソッドを使用してphpエラーログに記録できます。

2
jopke

次のようなファイルに書き込むこともできます。

$logFilePath = '../logs/debug.text';
ob_start();

// if you want to concatenate:
if (file_exists($logFilePath)) {
    include($logFilePath);
}
// for timestamp
$currentTime = date(DATE_RSS);

// echo log statement(s) here
echo "\n\n$currentTime - [log statement here]";

$logFile = fopen($logFilePath, 'w');
fwrite($logFile, ob_get_contents());
fclose($logFile);
ob_end_flush();

Phpがファイル(775)にアクセスして書き込みできるように、適切なアクセス許可が設定されていることを確認してください。

2
inorganik

単純な方法はtrigger_errorです:

 trigger_error("My error");

ただし、配列またはオブジェクトを配置することはできません

var_dump
2
Danzan

私は次のように使用するので、cakephpを使用します。

$this->log(YOUR_STRING_GOES_HERE, 'debug');
1
mmv_sat

これは、PHPのデバッグとロギングに最適なツールです。 PHp Debugger&Logger

わずか3行のコードですぐに動作します。 Ajaxデバッグのためにjsコンソールにメッセージを送信し、エラーハンドラーを置き換えることができます。また、var_dump()やprint_r()などの変数に関する情報も、より読みやすい形式でダンプします。非常に素晴らしいツール!

1
Charlie

次を使用できます。

<?php
echo '<script>console.log("debug log")</script>';
?>
1
steffanjj

Php curlモジュールを使用して http://liveoutput.com/ を呼び出すことができます。これは、file_put_contentsの使用を制限するphp.iniの特定の制限が存在する安全な企業環境でうまく機能します。

1
nottinhill

私はこれらの多くを使用しましたが、通常は開発時にデバッグする必要があり、ローカルホストで開発するため、他の人のアドバイスに従って、ブラウザのJavaScriptデバッグコンソールに書き込みます( http:// www.codeforest.net/debugging-php-in-browsers-javascript-console )。

つまり、PHPがブラウザーで生成しているWebページを表示し、F12キーを押すと、デバッグトレースをすばやく表示/非表示できます。

デバッガー、CSSレイアウトなどの開発者ツールを常に見ているので、そこでPHP loggonを見るのは理にかなっています。

誰かがそのコードを決定した場合、私は1つの小さな変更を加えました。後

function debug($name, $var = null, $type = LOG) {

追加した

$name = 'PHP: ' . $name;

これは、私のサーバー側PHPがJavaScriptを含むJavaScriptを生成するためです。PHPとJSからの出力を区別すると便利だと思います。

(注:現在、これを更新して、PHP、JS、およびデータベースアクセスからのさまざまな出力タイプのオン/オフを切り替えられるようにしています)

1
Mawg