當前位置:文思屋>社會工作>電腦培訓>

php非同步除錯和線上除錯網站程式

文思屋 人氣:6.75K

php非同步除錯和線上除錯網站程式既方便網站程式錯誤除錯,又不影響網站的正常執行的除錯方法。下面是小編為大家帶了的php非同步除錯和線上除錯網站程式,歡迎閱讀。

php非同步除錯和線上除錯網站程式

php非同步除錯和線上除錯網站程式

 程式碼如下

//ini_set('error_reporting',E_ALL ^ E_NOTICE);//顯示所有除了notice型別的錯誤資訊

ini_set('error_reporting',E_ALL);//顯示所有錯誤資訊

ini_set('display_errors',off);//禁止將錯誤資訊輸出到輸出端

ini_set('log_errors',On);//開啟錯誤日誌記錄

ini_set('error_log','C:/phpernote');//定義錯誤日誌儲存位置

另外附加兩句比較常用的排除錯誤資訊的PHP語句:

程式碼如下

@ini_set('memory_limit','500M');//設定程式可佔用最大記憶體為500MB

@ini_set('max_execution_time','180');//設定允許程式最長的執行時間為180秒

補充

die()和exit()也是我們常用的php除錯一個方法

die()和exit()函式都有終止執行緒的作用,是php斷點除錯需要使用的最主要的函式,它們也是php程式設計師使用非常頻繁的函式。然而兩者又有什麼區別呢?在程式除錯時需要注意什麼問題呢?

die()函式一般與“or”一併使用,寫作“or die()”,經常看到這樣的語句:

程式碼如下

$file = fopen($filename, 'r') or die("抱歉,無法開啟: $filename")

or在這裡是這樣理解的,因為在PHP中並不區分資料型別,所以$file既可以是int也可以bool,所以這樣的語句不會報錯。但其處理過程可能有些朋友不大明白。其實在大多數的語言中, bool or bool這樣的語句中,如果前一個值為真後一個值就不會再判斷了。這裡也是的,所以如果fopen函式執行正確的話,會返回一個大於0的int值(這其實就是"真"),後面的語句就不會執行了。如果fopen函式執行失敗,就會返回false,那麼就會判斷後面的表示式是否為真了。結果執行了die()之後,不管返回什麼,程式都已經停止執行了,並且顯示指定的.出錯資訊,也就達到了除錯的目的。就這樣。

實際上,die和exit是等價的,都是用來終止當前指令碼。

php手冊對兩者的解釋如是說:

exit() 函式輸出一條訊息,並退出當前指令碼。該函式是 die() 函式的別名。

die() 函式輸出一條訊息,並退出當前指令碼。該函式是 exit() 函式的別名。

例項:

程式碼如下

<?php $site = ""; fopen($site,"r") or exit("Unable to connect to $site"); ?>

<?php $site = ""; fopen($site,"r") or die("Unable to connect to $site"); ?>

var_dump()和print_r()

var_dump -- 列印變數的相關資訊

void var_dump ( mixed expression [, mixed expression [, ...]] )

此函式顯示關於一個或多個表示式的結構資訊,包括表示式的型別與值。陣列將遞迴展開值,通過縮排顯示其結構。

提示: 為了防止程式直接將結果輸出到瀏覽器,可以使用輸出控制函式(output-control functions)來捕獲此函式的輸出,並把它們儲存到一個例如 string 型別的變數中。

程式碼如下

<?php

$a = array (1, 2, array ("a", "b", "c"));

var_dump ($a);

$b = 3.1;

$c = TRUE;

var_dump($b,$c);

?>

var_dump()可以輸出多個變數,如:var_dump($b,$c)

print_r -- 列印關於變數的易於理解的資訊

bool print_r ( mixed expression [, bool return] )

注: 引數 return 是在 PHP 4.3.0 的時候加上的

print_r() 顯示關於一個變數的易於理解的資訊。如果給出的是 string、integer 或 float,將列印變數值本身。如果給出的是 array,將會按照一定格式顯示鍵和元素。object 與陣列類似。

記住,print_r() 將把陣列的指標移到最後邊。使用reset() 可讓指標回到開始處。

程式碼如下

<pre>

<?php

$a = array ('a' => 'apple',

'b' => 'banana',

'c' => array ('x','y','z'));

print_r ($a);

?>

</pre>

上邊的程式碼將輸出:

<pre> Array ( [a] => apple [b] => banana [c] => Array ( [0] => x [1] => y [2] => z ) ) </pre>

如果想捕捉 print_r() 的輸出,可使用 return 引數。若此引數設為 TRUE,print_r() 將不列印結果(此為預設動作),而是返回其輸出。

例子:return 引數示例

程式碼如下

<?php

$b = array ('m' => 'monkey',

'foo' => 'bar',

'x' => array ('x', 'y', 'z'));

$results = print_r ($b, true); //$results 包含了 print_r 的輸出結果

?>

注: 如果想在 PHP 4.3.0 之前的版本中捕捉 print_r() 的輸出,可使用輸出控制函式。

注: 在 PHP 4.0.4 之前的版本中,如果給出的 array 或 object 包含了直接或間接指向自身的引用,print_r() 將永遠繼續下去。print_r($GLOBALS) 就是一個例子,因為 $GLOBALS 自身即是全域性變數,其包含了指向自身的引用。

下面的幾個函式可以讓你隨時檢視程式中任何變數的型別及其值。

程式碼如下

function ss_array_as_string (&$array, $column = 0) {

$str = "Array(

n";

while(list($var, $val) = each($array)){

for ($i = 0; $i < $column+1; $i++){

$str .= "&nbsp;&nbsp;&nbsp;&nbsp;";

}

$str .= $var. ==>; ;

$str .= ss_as_string($val, $column+1)."

n";

}

for ($i = 0; $i < $column; $i++){

$str .= "&nbsp;&nbsp;&nbsp;&nbsp;";

}

return $str.);

}

function ss_object_as_string (&$object, $column = 0) {

if (empty($object->;classname)) {

return "$object";

}

else {

$str = $object->;classname."(

n";

while (list(,$var) = each($object->;persistent_slots)) {

for ($i = 0; $i < $column; $i++){

$str .= "&nbsp;&nbsp;&nbsp;&nbsp;";

}

global $$var;

$str .= $var. ==>; ;

$str .= ss_as_string($$var, column+1)."

n";

}

for ($i = 0; $i < $column; $i++){

$str .= "&nbsp;&nbsp;&nbsp;&nbsp;";

}

return $str.);

}

}

function ss_as_string (&$thing, $column = 0) {

if (is_object($thing)) {

return ss_object_as_string($thing, $column);

}

elseif (is_array($thing)) {

return ss_array_as_string($thing, $column);

}

elseif (is_double($thing)) {

return "Double(".$thing.")";

}

elseif (is_long($thing)) {

return "Long(".$thing.")";

}

elseif (is_string($thing)) {

return "String(".$thing.")";

}

else {

return "Unknown(".$thing.")";

}

}