PHP脚本什么也不做.如何调试


PHP script does nothing. How to debug?

我有一个什么都不做的脚本。它甚至没有在脚本的第一行返回一个echo ??

我所有的其他脚本工作,他们是相似的,有相同的权限,并在同一个文件夹。

它在远程网络空间中运行。我如何调试这个?

把下面一行放在你的脚本的顶部

ini_set('display_errors', 'On');
error_reporting(E_ALL);

检查php.ini设置

php.ini:
display_errors = On
error_reporting = E_ALL

作为一个程序员,知道如何使用调试工具是很方便的。我建议您使用xdebug

作为最后的手段,(正如其他人提到的首选方法)

你可以把所有的代码注释掉,并在代码停止时回溯代码,只是要注意if{}块和其他控制结构。例如. .假设你有这样的代码。

<?php
function do_nothing(){
}
$somthing = 1;
if($something){
  do_nothing();
}
$badCode = 'hello'
$array = array(1,2,3,4,5);
foreach($array as $item ){
   echo 'item: '.$item;
}

没有输出,因为它是坏的。

可以
<?php
/*
function do_nothing(){
}
$somthing = 1;
if($something){
  do_nothing();
}
$badCode = 'hello'
$array = array(1,2,3,4,5);
foreach($array as $item ){
   echo 'item: '.$item;
}
*/
echo 'works';

输出
'works'

然后继续

<?php
/*
function do_nothing(){
}
$somthing = 1;
if($something){
  do_nothing();
}
$badCode = 'hello'
*/
$array = array(1,2,3,4,5); //need this for the loop
foreach($array as $item ){
 //don't comment half this block
   echo 'item: '.$item;
}
echo 'works';

输出
'item: 1'
'item: 2'
'item: 3'
'item: 4'
'item: 5'
'works'
最后

<?php
/*
function do_nothing(){
}
$somthing = 1;
if($something){
  do_nothing();
}
*/
$badCode = 'hello'
$array = array(1,2,3,4,5); //need this for the loop
foreach($array as $item ){
 //don't comment half this block
   echo 'item: '.$item;
}
echo 'works';

坏了,(缺少分号$badCode = 'hello';)

可以肯定,这是一种基本的调试方式。但如果你尊重控制块,它将100%有效。

也一定要熟悉不同的打印函数。

  • echo -输出一个或多个字符串
  • print_r -打印关于变量的人类可读信息
  • var_export—输出或返回变量的可解析字符串表示形式
  • var_dump—转储变量
  • 的信息
  • debug_backtrace -生成回溯信息

我相信还有更多这样的,但这些是最常见的。使用<pre>也很有用

在打印对象和数组之前标记,以保留空白,使其易于阅读。

我也喜欢使用这个小函数(它可以告诉你从哪一行打印)

/**
 * export a variable with line number from backtrace using offset
 * @param mixed $var
 * @param int $offset
 */
function print_debug($var=null, $offset=0){
    $stacktrace = debug_backtrace(false);
    $trace = $stacktrace[$offset];
    extract($trace);
    echo "<span style='color: #CCC;'> Output from FILE[ $file ] LINE[ $line ]</span>";
    echo "<pre>";
    var_export($var);
    echo "</pre>";
}