php調(diào)試方法

前言:這里的調(diào)試方法是指找錯誤,和分析錯誤的方法。

成都創(chuàng)新互聯(lián)專注于咸豐網(wǎng)站建設服務及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供咸豐營銷型網(wǎng)站建設,咸豐網(wǎng)站制作、咸豐網(wǎng)頁設計、咸豐網(wǎng)站官網(wǎng)定制、微信平臺小程序開發(fā)服務,打造咸豐網(wǎng)絡公司原創(chuàng)品牌,更為您提供咸豐網(wǎng)站排名全網(wǎng)營銷落地服務。

測試代碼最好打開php錯誤報告,方法有兩種一種是在php.ini里面設置。另外一種是使用函數(shù)error_reporting。打開php.ini找到error_reporting修改成error_reporting = ALL;當然我們當初是拷貝的開發(fā)那份,所以是默認打開的,如果你的關閉了只要修改這里就好了。reporting也有等級區(qū)分。以后在介紹php.ini的時候詳細介紹。

另外如果命令行模式我們一般會加上

1 set_time_limit(0);// 取消php的運行時間限制,讓程序可以長時間運行
2 ini_set(\'memory_limit\',\'512M\');//根據(jù)需要設置所需要的內(nèi)存數(shù)量一般用用不需要設置這行在需要大內(nèi)存的時候設置下
3 ob_end_flush();//刷新緩沖區(qū)運行到哪里顯示到哪里,但是在emacs中無法實現(xiàn),在命令行中可以

在命令行下試試下面的代碼吧

01 <?php
02
03 set_time_limit(0);
04 ini_set(\'memory_limit\',\'512m\');
05 ob_start();
06 ob_end_flush();
07
08 echo"我開始了";
09 for($i=0;$i<70;$i++){
10 sleep(1);
11 echo$i."n";
12 }
13 echo"我結束了";
14 ?>

將這段代碼保存到d:/www/test/a.php然后到cmd中運行php d:/www/test/a.php看看效果吧

php調(diào)試

一、錯誤定位

錯誤1語法錯誤:這類錯誤最容易定位,無論是web程序還是命令行程序,都會給出出錯的行,然后你根據(jù)出錯的行去修改調(diào)試,直到正確。還記得emacs C+c r今天再教大家一個C+c d 修改.emacs文件在以下代碼的上方

1 (define-key php-mode-map
2 [menu-bar php php-run]
3 \'("Run PHP". php-run))

加入

01 (define-key php-mode-map
02 [menu-bar php php-debug]
03 \'("PHP Debug". php-debug))
04
05 (defun php-debug ()
06 (interactive)
07 (shell-command
08 (concat"C:/php/php.exe -f ""
09 (buffer-file-name)
10 """)))

在(define-key php-mode-map [(control c) (r)] ‘php-run)下一行加入(define-key php-mode-map [(control c) (d)] ‘php-debug)

然后重啟emacs打開一個php文件輸入<?php echo “我是個錯誤的示范” echo ;?>試試C+c d吧是否提示錯誤啦。

錯誤2沒有運行:這類錯誤是指運行過程中中斷了,調(diào)試這類錯誤我通常是在有可能出錯的地方前后加入echo “num”;比如如下代碼

1 <?php
2 echo"1";
3 if(0 && true){
4 echo"2";
5 echo"我不會輸出";
6 }
7 echo"3";
8 ?>

也許你對&&理解有誤導致了這個問題,上面的代碼將輸出13而2沒有輸出所以是if判斷有問題。

錯誤3算法錯誤:這類錯誤簡而言之就是結果和你預期不符合,這樣的錯誤比較難找原因。你需要清晰的邏輯,首先你要知道每一行代碼對運算結果的影響,一行一行的輸出看看哪一行輸出不是預期結果。

二、輸出

輸出單行用echo,print。為了輸出美觀點,一般在命令行模式比如你在用C+c r調(diào)試的時候一般在后面跟著輸出”n”比如<?php echo “測試輸出n”;echo “測試輸出n”;?>而在web調(diào)試的時候輸出”<br />”比如<?php echo “測試輸出<br />”;echo “測試輸出<br />”;?>

輸出其他類型可以用var_dump、print_r、var_export,當然這些函數(shù)也可以打印字符串,只是多打幾個字母而已。其中var_dump和var_export類似只是打印出數(shù)組或對象的字符串形式,而var_dump還會打印出變量的類型,而print_r打印出的內(nèi)容更容易閱讀。試試下面的代碼吧。

01 <?php
02 $str="我是字符串";
03 $arr=array(1,array(2,3,"我是數(shù)組的一部分"));
04
05 echo$str;
06 echo"n";
07 echo$arr;
08 echo"n";
09 print$str;
10 echo"n";
11 print$arr;
12 echo"n";
13 var_dump($str);
14 echo"n";
15 var_dump($arr);
16 echo"n";
17 print_r($str);
18 echo"n";
19 print_r($arr);
20 echo"n";
21 var_export($str);
22 echo"n";
23 var_export($arr);
24 echo"我有雙"引號"";
25 echo"我有直接引用,$str";
26 echo"我有鏈接符"."我是被鏈接的字符串";
27 ?>

上例中的最后三行,顯示了幾種常見用法。即字符串中有和包裹字符串的引號相同時使用反斜杠來區(qū)分比如”我是”雙引號”" ’\'我是單引號”,如果單引號和雙引號混用時要注意包裹范圍。字符串和字符串之間用.來鏈接。

這里告訴大家一個更加實用的函數(shù)

1 <?php
2 functiondump($val){
3 echo\'<pre style="text-align:left;">\';
4 print_r($val);
5 echo\'</pre>\';
6 }
7 ?>

這樣在web輸出的時候也能夠容易讀一點只要把這段代碼放到要運行的php之前即可。

為了調(diào)試方便一般會再輸出后面加上exit;讓代碼停止運行。

三、區(qū)別正式環(huán)境和測試環(huán)境

有時候需要正式環(huán)境和測試環(huán)境內(nèi)容不同,一個方法是在apache收到請求的時候就在環(huán)境里面告訴php是測試環(huán)境還是正式環(huán)境。就是在虛擬主機里面配置SetEnv ENV “dev”在php代碼中可以用$_SERVER[\'ENV\']取得dev這個值當然ENV和dev都是自定義的。這樣就可以區(qū)分是什么環(huán)境了。

另外有時候你想再正式環(huán)境運行代碼,但是又不能讓普通用戶看到你的測試代碼怎么辦呢??梢栽诘刂泛竺婕?__DEBUG__=1來區(qū)分,因為普通用戶瀏覽的時候不會知道還有這個參數(shù)。而你可以用$_GET[\'__debug__\']==1來判斷是不是測試用的。當然__DEBUG__ 和 1是自定義的,你可以選任何你知道。

新聞名稱:php調(diào)試方法
轉載源于:http://muchs.cn/article44/cjphee.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營銷、品牌網(wǎng)站設計、品牌網(wǎng)站制作、自適應網(wǎng)站網(wǎng)站設計、品牌網(wǎng)站建設

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)