我想调试一些 PHP 代码,但我想打印一个日志到屏幕或文件对我来说是好的。
如何打印 PHP 代码中的日志?
通常的 print/printf似乎转到 HTML 输出而不是控制台。
print
printf
我让 Apache 服务器执行 PHP 代码。
如果不想集成像 赞德这样的框架,那么可以使用 触发器错误方法将日志记录到 php 错误日志。
可以使用 Error _ log 错误日志将错误日志文件发送到服务器(如果愿意,也可以选择其他文件)
你需要改变你的心态。您正在编写 PHP,而不是您用来编写的任何其他东西。PHP 中的调试不是在控制台环境中完成的。
在 PHP 中,有3类调试解决方案:
学会使用这些语言,而不是试图让 PHP 表现得像您所习惯的任何其他语言一样。
是否在控制台上进行调试? 调试 PHP 有多种选项。 用于快速调试的最常用函数是 Var _ dump。
话虽如此,尽管 var _ dump 非常棒,而且很多人都是用它来做所有事情,但是还有其他 工具和技术可以为它增添一些情趣。
如果在网页中进行调试,那么可以在 dump 语句周围包装 <pre> </pre>标记,从而为数组和对象提供正确的格式设置。
<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');
祝你好运!
一个鲜为人知的技巧是 mod _ php 将 stderr 映射到 Apache 日志。并且,这里有一个流,因此 file_put_contents('php://stderr', print_r($foo, TRUE))将很好地将 $foo的值转储到 Apache 错误日志中。
file_put_contents('php://stderr', print_r($foo, TRUE))
$foo
你可以用
<?php { AddLog("anypage.php","reason",ERR_ERROR); } ?>
或者如果要在日志中打印该语句,可以使用
AddLog("anypage.php","string: ".$string,ERR_DEBUG_LOW);
简单来说就是触发错误:
trigger_error("My error");
但是你不能把数组或对象因此使用
var_dump
您可以使用 php curl 模块调用 http://liveoutput.com/。这在安全的公司环境中非常有效,因为 php.ini 中存在某些限制,限制了 file_put_contents的使用。
file_put_contents
error_log(print_r($variable, TRUE));
可能有用
这是一个调试和记录 php 的好工具: PHP 调试器和记录器
它只需要3行代码就可以立即工作。 它可以将消息发送到 js 控制台进行 ajax 调试,并且可以替换错误处理程序。 它还转储有关 var _ dump ()和 print _ r ()等变量的信息,但是格式更易读。 非常好的工具!
我已经使用了很多这样的方法,但是由于我通常在开发时需要调试,而且由于我是在 localhost 上开发的,所以我遵循了其他人的建议,现在写到浏览器的 JavaScript 调试控制台(参见 http://www.codeforest.net/debugging-php-in-browsers-javascript-console)。
这意味着我可以查看我的 PHP 在浏览器中生成的网页并按 F12快速显示/隐藏任何调试跟踪。
因为我一直在寻找用于调试器、 CSS 布局等的开发工具,所以在那里查看我的 PHP 日志是有意义的。
如果有人决定给我们那个代码,我做了一个小小的改动。之后
function debug($name, $var = null, $type = LOG) {
我加了一句
$name = 'PHP: ' . $name;
这是因为我的服务器端 PHP 生成包含 JavaScript 的 HTML,我发现区分 PHP 和 JS 的输出非常有用。
(注意: 我目前正在更新它,以允许我打开和关闭不同的输出类型: 从 PHP,从 JS,和数据库访问)
如果你使用 Linux:
file_put_contents('your_log_file', 'your_content');
或者
error_log ('your_content', 3, 'your_log_file');
然后在控制台
tail -f your_log_file
这将连续显示放在文件中的最后一行。
我使用 cakephp,所以我使用:
$this->log(YOUR_STRING_GOES_HERE, 'debug');
您也可以写入这样的文件:
$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)。
775
你可使用:
<?php echo '<script>console.log("debug log")</script>'; ?>