デバッグログを印刷する方法


129

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

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

通常のprint/ printfはコンソールではなくHTML出力に行くようです。

私は、ApacheサーバーでPHPコードを実行しています。


スクリプトはWebブラウザーまたはコンソール(別名apache / iisではなくphp.exeを使用して解析)で実行されていますか?
danielrsmith、

あなたはこの質問を見なければならない、便利なログコードのビットを持っていますstackoverflow.com/questions/5769537/...
ベン・

何語から来たの?ちょうどあなたのphpは他のコンパイルされた言語とは非常に異なります
Ibu

1
@lbu:確かに..私は期待していなかった、printf質問はこれだけの賛成票を獲得するだろう...
eugene

error_log($ string);
Thewebus

回答:


186

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


1
+ところであなたができる、ということmentionningためONED また、error_logに(3「あなたは台無しに!」:コンソールアプリケーションをデバッグするとき:「//標準出力のphp」とエラーメッセージがストレートコンソールに表示されている、すなわちへのerror_logの値を設定します、 "php:// stdout");
stefgosselin

4
+1この答えを見つけるのに時間がかかりすぎました。私が本当に探していたのはこれだけです。私の配列に何が含まれているかを確認する方法がわかりませんでした(Drupalで動作しています)。
SteveS 2014年

if が必要なタイプ情報を取得できない場合のvar_export($foo, true)代わりにを使用することもお勧めします。print_r($foo, true)print_r
ベン

それはerror_log(print_r($ foo));と同じではありませんか??
Brunis、2018


26

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


21

Linuxを使用している場合:

file_put_contents('your_log_file', 'your_content');

または

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

そしてコンソールで

tail -f your_log_file

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


9

あなたの心の枠組みを変える必要があります。あなたはPHPを書いているのであり、あなたが書いて慣れている他のものではありません。PHPでのデバッグは、コンソール環境では行われません。

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

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

PHPを他の言語と同じように動作させるのではなく、それらの使い方を学びましょう。


31
コンソールアプリやさまざまな非Webスクリプトの作成に多くの時間を費やしている人として、私は丁寧にそれに同意しません。
stefgosselin

私はコンソールアプリケーションの保守と開発に多くの作業を行っていますが、私の悪い英語の解釈では、彼がコンソールアプリをデバッグしようとしていると思っていました。Xdebugは問題なく、非常に便利ですが、エディターで
直接好みます

1
@Stefgosselin:NetBeansもほぼ同じですが、xDebugで見た最高のものはAptanaでした。
Sylverdrag、

1
私はNetBeansでxDebugを使用しており、ほとんどの場合問題なく動作します。ただし、ファイルにログを記録する必要がある場合があります。
cosan

これらも試してください。あなたはもっとできるようになります!stackoverflow.com/a/44050914/2053479
ganesh

5

コンソールでデバッグしていますか?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');

幸運を!



2

単純な方法はtrigger_errorです:

 trigger_error("My error");

しかし、あなたは配列やオブジェクトを置くことができないので、

var_dump

trigger_errorは、おそらくエラーログに書き込むための最良の方法です。後でいくつかのカスタムデータを含むログ行を変更する場合は、自分に感謝します。
Anshul 2012

2

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

$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)。


1

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


1

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

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


1

私はこれらの多くを使用しましたが、通常は開発時にデバッグする必要があるため、および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から、およびデータベースアクセスから、さまざまな出力タイプをオンおよびオフに切り替えられるようにしています)


1

私はcakephpを使用しているので、以下を使用します:

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

0

以下を使用できます。

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

2
これには多くのオーバーヘッドがあります。単純なエラー出力のためにJavaScriptを呼び出す理由
clockw0rk 2018

-8

使用できます

<?php
{
    AddLog("anypage.php","reason",ERR_ERROR);
}
?>

または、そのステートメントをログに出力したい場合は、

AddLog("anypage.php","string: ".$string,ERR_DEBUG_LOW);

8
AddLog?これはネイティブ関数ではありません。
stefgosselin
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.