我想调试一些PHP代码,但我想将日志打印到屏幕或文件对我来说很好。
我应该如何在PHP代码中打印日志?
通常print
/ printf
似乎去HTML输出而不是控制台。
我有Apache服务器执行PHP代码。
printf
问题会引起如此众多的投票……
我想调试一些PHP代码,但我想将日志打印到屏幕或文件对我来说很好。
我应该如何在PHP代码中打印日志?
通常print
/ printf
似乎去HTML输出而不是控制台。
我有Apache服务器执行PHP代码。
printf
问题会引起如此众多的投票……
Answers:
一个鲜为人知的技巧是mod_php将stderr映射到Apache日志。并且,有一个流,因此file_put_contents('php://stderr', print_r($foo, TRUE))
可以很好地将的值转储$foo
到Apache错误日志中。
var_export($foo, true)
,而不是print_r($foo, true)
如果print_r
没有得到你所需要的类型信息。
您需要改变心态。您正在编写PHP,而不是用来编写PHP的其他任何东西。在控制台环境中无法在PHP中进行调试。
在PHP中,您有3类调试解决方案:
学习使用这些语言,而不是尝试使PHP的行为像您习惯的其他语言一样。
您在控制台上调试吗?有多种调试PHP的选项。用于快速且肮脏的调试的最常用功能是var_dump。
话虽这么说,但尽管var_dump很棒,而且很多人都这样做,但是还有其他工具和技术可以使它变得更有趣。
如果要在网页中进行调试,可以帮助解决的事情是,<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错误日志。
您也可以这样写文件:
$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行代码即可直接使用。它可以将消息发送到js控制台进行ajax调试,并可以替换错误处理程序。它还以更易读的格式转储有关变量的信息,如var_dump()和print_r()。很好的工具!
我已经使用了许多方法,但是由于在开发时通常需要进行调试,并且由于我是在localhost上进行开发,因此我遵循了其他人的建议,现在将其写入浏览器的JavaScript调试控制台(请参见http://www.codeforest。 net / debugging-php-in-browsers-javascript-console)。
这意味着我可以在浏览器中查看PHP生成的网页,然后按F12键快速显示/隐藏任何调试跟踪。
由于我一直在寻找调试器,CSS布局等开发人员工具,因此在这里查看我的PHP loggon是有意义的。
如果有人决定向我们提供该代码,则我做了一个小的更改。后
function debug($name, $var = null, $type = LOG) {
我加了
$name = 'PHP: ' . $name;
这是因为我的服务器端PHP生成了包含JavaScript的HTML,我发现区分PHP和JS的输出非常有用。
(注意:我目前正在对此进行更新,以允许我打开和关闭不同的输出类型:从PHP,从JS和数据库访问)
您可以使用
<?php
{
AddLog("anypage.php","reason",ERR_ERROR);
}
?>
或者,如果您想在日志中打印该语句,则可以使用
AddLog("anypage.php","string: ".$string,ERR_DEBUG_LOW);