我有一个什么都不做的脚本。它甚至没有在脚本的第一行返回一个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>";
}