你如何调试PHP脚本?
我知道基本调试,例如使用错误报告.PHPEclipse中的断点调试也非常有用.
在phpStorm或任何其他IDE中调试的最佳方法(快速简便)是什么?
我有一个简单的$_GET[]查询var set,用于在从DB下拉查询时显示测试数据.
<?php if($_GET['test']): ?>
<div id="test" style="padding: 24px; background: #fff; text-align: center;">
<table>
<tr style="font-weight: bold;"><td>MLS</td></tr>
<tr><td><?php echo KEY; ?></td></tr>
<tr style="font-weight: bold;"><td>QUERY</td></tr>
<tr><td><?php echo $data_q; ?></td></tr>
<tr style="font-weight: bold;"><td>DATA</td></tr>
<tr><td><?php var_dump($data); ?></td></tr>
</table>
</div>
<?php endif; ?>
Run Code Online (Sandbox Code Playgroud)
当我这样做的时候var_dump,正如预期的那样,这个大阵列的字符串都被一起刷了.有没有办法至少为此添加换行符或var_dump以更可读的方式显示?我对jQuery有关在发布后操纵字符串的建议持开放态度.
我正在使用MVC框架Symfony,似乎我想调试的很多内置对象都有循环引用.这使得无法使用print_r()或打印变量var_dump()(因为它们无限制地遵循循环引用或直到进程耗尽内存,以先到者为准).
而不是print_r用一些智能编写我自己的克隆,那里有更好的替代品吗?我只希望能够将变量(对象,数组或标量)打印到日志文件,http标头或网页本身.
编辑:要澄清问题所在,请尝试以下代码:
<?php
class A
{
public $b;
public $c;
public function __construct()
{
$this->b = new B();
$this->c = new C();
}
}
class B
{
public $a;
public function __construct()
{
$this->a = new A();
}
}
class C
{
}
ini_set('memory_limit', '128M');
set_time_limit(5);
print_r(new A());
#var_dump(new A());
#var_export(new A());
Run Code Online (Sandbox Code Playgroud)
它无法使用print_r(),var_dump()或var_export().错误消息是:
PHP致命错误:第10行的print_r_test.php中允许的内存大小为134217728字节(尝试分配523800字节)
让我们面对现实,debug_backtrace()输出不是很漂亮.有没有人编写包装器?
什么是你最喜欢的漂亮var_dump()(可用于商业项目,所以没有GPL(虽然LGPL是好的))
另请参阅:PHP中更漂亮/信息丰富的Var_dump替代方案?
六年 - 以及这个问题的一万次观点 - 后来,我仍在使用这个.它在屏幕上显得不错,就像Kint(非常棒).
它是纯文本,我可以通过自动错误报告发送给自己,并可以使用ChromePhp在浏览器的开发人员控制台中显示.
/**
* @brief Returns an HTML formatted string showing details of the backtrace
*
* Example:
*
* F:\Dropbox\programs\Xampp\htdocs\api\q.php:48 e(373, 'beer', 'curry')
* F:\Dropbox\programs\Xampp\htdocs\api\q.php:53 d(26366, 28255, 8364)
* F:\Dropbox\programs\Xampp\htdocs\api\q.php:58 c()
* F:\Dropbox\programs\Xampp\htdocs\api\q.php:63 b(1283, 15488, 29369)
* F:\Dropbox\programs\Xampp\htdocs\api\q.php:72 a(788, 6077, 25010)
*/
function FormatBacktrace()
{
$result = '<h4>Backtrace</h4>';
foreach (debug_backtrace() as $trace)
{
if ($trace['function'] ==__FUNCTION__)
continue;
$parameters = is_array($trace['args']) ? …Run Code Online (Sandbox Code Playgroud) 我知道(PHP的)var_dump应该是"人类可读的"所有,但分析大型物体只是一个痛苦的问题.我正在努力理解在我们正在运行的脚本中传递的一些大对象.(我知道使用xdebug和IDE是一个好主意,但由于某种原因,我无法让xdebug在这个项目上运行 - 几天丢失了,呃).
关于如何轻松消化真正大的var_dump内容的任何想法?任何想法,欢迎...虽然我希望能有类似的东西托马斯·弗兰克的JSON工具(如你只是把一些代码,它给出了一个漂亮的图形表示).
我正在使用dump($value)函数。我有一个关联数组,其中有很多条目。我需要立即查看这些值,而无需在转储时单击扩展按钮。我可以var_dump()立即看到它,但我更喜欢使用 dump,因为它是现代且交互式的。下面是 dump 函数的快照:
我经常需要在数组中查看数据并使用html标记<pre>来执行此操作.然而,不得不一直打出相同的东西变得乏味和令人沮丧.
我的问题是,你的技术是什么,以避免这种使用PHP编程的烦恼?
我见过一些在线漂亮的打印模块代码.有人知道将多维数组格式化为可读显示吗?
例如,翻译这个:
array(83){[0] => array(2){["name"] => string(11)"CE2 Options"["type"] => string(5)"title"} [1] => array(1){["type"] => string(4)"open"} [2] => array(5){["name"] => string(8)"Template"["desc"] = > string(638)"test description"["id"] => string(9)"my_theme"["type"] => string(14)"selectTemplate"["options"] => array(13){
进入这...
array(83) {
[0]=> array(2) { ["name"]=> string(11) "My Options" ["type"]=> string(5) "title" }
[1]=> array(1) { ["type"]=> string(4) "open" }
[2]=> array(5) {
["name"]=> string(8) "Template"
["desc"]=> string(638) "Test description"
["id"]=> string(9) "my_theme"
["type"]=> string(14) "selectTemplate"
["options"]=> array(13) {
[0]=> string(10) "test"
Run Code Online (Sandbox Code Playgroud)