一部のPHPコードをデバッグしたいのですが、ログを画面またはファイルに出力するのが適切だと思います。
PHPコードでログを出力するにはどうすればよいですか?
通常のprint
/ printf
はコンソールではなくHTML出力に行くようです。
私は、ApacheサーバーでPHPコードを実行しています。
printf
質問はこれだけの賛成票を獲得するだろう...
一部のPHPコードをデバッグしたいのですが、ログを画面またはファイルに出力するのが適切だと思います。
PHPコードでログを出力するにはどうすればよいですか?
通常のprint
/ printf
はコンソールではなくHTML出力に行くようです。
私は、ApacheサーバーでPHPコードを実行しています。
printf
質問はこれだけの賛成票を獲得するだろう...
回答:
あまり知られていないトリックは、mod_phpがstderrをApacheログにマッピングすることです。そして、そのためのストリームがあるので、Apacheエラーログにfile_put_contents('php://stderr', print_r($foo, TRUE))
値を適切にダンプし$foo
ます。
var_export($foo, true)
代わりにを使用することもお勧めします。print_r($foo, true)
print_r
error_log(print_r($variable, TRUE));
役に立つかもしれません
Linuxを使用している場合:
file_put_contents('your_log_file', 'your_content');
または
error_log ('your_content', 3, 'your_log_file');
そしてコンソールで
tail -f your_log_file
これにより、ファイルに入力された最後の行が継続的に表示されます。
あなたの心の枠組みを変える必要があります。あなたはPHPを書いているのであり、あなたが書いて慣れている他のものではありません。PHPでのデバッグは、コンソール環境では行われません。
PHPでは、デバッグソリューションの3つのカテゴリがあります。
PHPを他の言語と同じように動作させるのではなく、それらの使い方を学びましょう。
コンソールでデバッグしていますか?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');
幸運を!
Zendのようなフレームワークを統合したくない場合は、trigger_errorメソッドを使用して、phpエラーログにログを記録できます。
単純な方法はtrigger_errorです:
trigger_error("My error");
しかし、あなたは配列やオブジェクトを置くことができないので、
var_dump
次のようなファイルに書き込むこともできます。
$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
)。
php curlモジュールを使用して、http://liveoutput.com/を呼び出すことができます。これは、php.iniにの使用を制限する特定の制限が存在する安全な企業環境でうまく機能しfile_put_contents
ます。
これは、phpのデバッグとロギングに最適なツールです。PHpデバッガーとロガー
ほんの3行のコードですぐに動作します。ajaxデバッグのためにjsコンソールにメッセージを送信し、エラーハンドラーを置き換えることができます。また、var_dump()やprint_r()などの変数に関する情報もダンプしますが、より読みやすい形式です。とても良いツールです!
私はこれらの多くを使用しましたが、通常は開発時にデバッグする必要があるため、およびlocalhostで開発しているため、他の人のアドバイスに従い、ブラウザーのJavaScriptデバッグコンソールに書き込みます(http://www.codeforest。 net / debugging-php-in-browsers-javascript-console)。
つまり、私のPHPがブラウザーで生成しているWebページを確認し、F12キーを押して、デバッグトレースをすばやく表示/非表示にできます。
私は常にデバッガーやCSSレイアウトなどの開発ツールを見ているので、そこに私のPHPログを見るのは理にかなっています。
誰かがそのコードを私たちに決定した場合、私は1つのマイナーな変更を加えました。後
function debug($name, $var = null, $type = LOG) {
追加した
$name = 'PHP: ' . $name;
これは、サーバー側のPHPがJavaScriptを含むHTMLを生成するためです。また、PHPとJSの出力を区別すると便利です。
(注:現在、これを更新して、PHPから、JSから、およびデータベースアクセスから、さまざまな出力タイプをオンおよびオフに切り替えられるようにしています)
以下を使用できます。
<?php
echo '<script>console.log("debug log")</script>';
?>
使用できます
<?php
{
AddLog("anypage.php","reason",ERR_ERROR);
}
?>
または、そのステートメントをログに出力したい場合は、
AddLog("anypage.php","string: ".$string,ERR_DEBUG_LOW);