導航:首頁 > 編程語言 > php調試日誌

php調試日誌

發布時間:2022-12-29 06:09:05

⑴ 如何使用php日誌調試rewrite規則

RewriteLog "/myfolder/mylogfile.log"
RewriteLogLevel 9
這樣apache可以自動生成一個重寫日誌,看著日誌調試就方便了
Rewriteloglevel 0 代表關閉,9代表開啟最大debug輸出,調為9可以看到最詳細的重寫匹配信息

可是IIS環境呢,這個有點麻煩,於是我用網上搜的一個log類來做日誌
大致原理是這樣的,在網站的index.php這里寫一段
$log = new log("/logs/sys.log");
$log->logThis($_SERVER["REQUEST_URI"]);
//$_SERVER["REQUEST_URI"] 是重寫的實際執行頁面

⑵ php程序調試方法總結

相信很多朋友們都有調試程序的經歷 然而很多時候調試程序是痛苦而又漫長的過程;它不僅需要細心 更需要耐心 切忌心浮氣躁 但是當找出問題並順利解決它時 又會給人無比激動的喜悅 這里總結一下筆者在程序調試中的使用的原則 工具 以及方法 這里需要說明的是 某些原則性的東西 各種語言都是差不多的 而涉及到具體的工具和某些具體的調試方法 這里只涉及web開發方面的內容

總體原則

找出問題原因

程序需要調試 是因為程序有問題 而調試的第一目標是找到原因 常見調試方法 排除法: 當我們面對整個復雜的系統時 常常完全不知道問題出在什麼地方;這個時候可以先將與問題不相關的地方排排除 逐漸縮小調試范圍 獨立模塊法: 大部分程序都有模塊結構 將可疑模塊單獨拿出來 模擬輸入相應的操作數據 看是否出現問題 比較法 如果程序或系統是基於某個平台時 可以先看看其他基於本平台的程序或系統 找出是平台問題還是本程序問題 很多時候這種方法是用來排除不成熟平台上的隱藏問題 對比法 對於自己實現的程序 可能已經有相應的開源的模塊 可以把這些程序源碼找出來 和自己的程序進行對比 這樣不僅節省時間 還能借鑒別人的優秀之處

問題定位

問題原因的多種多樣 可能這個時候你只能知道是什麼樣的問題 可能與什麼相關 這個時候就需將出現的代碼段找出來 而需要做到這一步 一般開發環境為我們提供很多實用工具 藉助這些工具 可以一步一步地查看程序的輸入和輸出 根據每一步的輸入輸出 定位問題

有一部分很厲害的人 可以通過閱讀代碼 找到出現問題的地方 但是很多問題都是調試者自己因為疏忽造成的 而要通過這樣方式去查找問題 幾乎是不可能的 因為已經形成固定的思維定勢

解決問題

找到問題的原因和相應代碼行 解決它很多時候是一件比較簡單的事 因為這些問題往往自己疏忽或者自己考慮不周 但是某些時候並不總是這樣的 而是由於外部環境造成的 比如你的網站訪問的人數增多 你當初沒有考慮到這些數據壓力 同時也沒有考慮到高度並發性的問題 這個時候問題解決起來是你覺得比較棘手 而要解決這樣的問題 不僅僅要專注程序 更要從系統架構方面著手 綜合各方面的知識 進行全面的考慮

web開發常用調試工具

俗話說 工欲善其石 必先利其器 對於程序的調試 也必須藉助外部工具 這里介紹幾種在開發web程序中常常用到的工具

xdebug xhprof php性能調試工具 他們都是php的一種擴展 可以很方便的安裝和配置 這兩個工具主要是將你程序的內部運行狀況 調用函數以一種簡潔的方式告訴你 讓你對程序在什麼地方佔用過多的資源 那些地方需要進行優化一目瞭然 順便提一下 xdebug生成的profile文件一般藉助winCacheGrid查看

firephp firbug 前者主要是php的調試工具 而後者是web開發必不可少的工具 它不僅能查看請求 還能調試js css

在ie下面可以使用HttpWatch 如果需要將數據做深入分析 可以使用抓包工具

php中常使用的調試函數 error_report var_mp print_r var_export

mysql apache/nginx的常用的調試技巧 分析他們日誌文件也是相當重要 在linux下查看日誌文件的常用命令 cat more less grep awk sed

常見的調試技巧和方法

下面以我調試的程序來介紹一下具體的調試方法和技巧

例子 這是一個php開發的游戲引擎 主要功能提供雙發球員移動位置 狀態 傳球 技能等功能控制 整個程序通過xml文件保存結果 突然某天 有兩個用戶進行比賽 返回的xml不符合正常的結構 從返回的結果來看 球員的移動位置有些不正常 其中少了某些步驟 於是決定從游戲的AI入手查找 但是也沒有發現此處有什麼異常 最後將輸入的球員數據列印出來 然後將中間產生的數據也列印出來 結合程序的處理邏輯 發現是這兩個用戶有同一個球員 因此導致在處理的時候 兩個人的球員出現混亂 找到原因後 就將這個以球員標識改為以球隊和球員共同決定即可

例子 程序剛上線 有些熱心的朋友們喜歡對程序進行一些壓力測試 某次突然 w的請求很大的一個靜態資源 直接導致硬碟癱瘓 對於這種情況 必須查看訪問日誌 才知道發生什麼事 否則人家對你攻擊了 你還找不到原因 當然對於這樣的攻擊 直接把靜態資源放到cdn上 另外 隨著訪問用戶量的增大 系統的壓力增大 反應逐漸變慢 我們不得不考慮 以前只需要 幾毫秒能處理的程序 現在需要 幾秒 這個時候程序的並發性設計就很重要了 否則會造成數據異常的情況

例子 使用外部軟體出現異常 例如使用memcached的時候 如果某台沒有啟動或者不能使用了 這個時候nginx一般就會對某些使用memcache的請求返回 是不是感覺有點無厘頭 可以考慮改寫memcahce 的php擴展了

lishixin/Article/program/PHP/201311/21278

⑶ 如何 gdb 調試php-fpm

1,安裝strace

[html] view plain
sudo apt-get install strace

2,查看php-fpm進程

[html] view plain
vagrant@vagrant-ubuntu-precise-64:~$ ps -ef | grep php-fpm
root 2105 1 0 04:02 ? 00:00:02 php-fpm: master process (/etc/php5/fpm/php-fpm.conf)
www-data 2105 0 04:02 ? 00:00:02 php-fpm: pool www
www-data 18481 2105 0 07:05 ? 00:00:01 php-fpm: pool www
www-data 18513 2105 0 07:06 ? 00:00:03 php-fpm: pool www
vagrant 19312 6379 0 10:14 pts/4 00:00:00 grep --color=auto php-fpm

3,調試進程輸出日誌到文件

[html] view plain
vagrant@vagrant-ubuntu-precise-64:~$ sudo strace -f -p 2105 -e trace=file -o /temp/trace.log
Process 2105 attached - interrupt to quit
Process 19349 attached
Process 19350 attached

4,查看日誌文件

[html] view plain
tail -f /temp/trace.log

⑷ 如何使用php日誌調試rewrite規則

rewrite
是nginx 和 apache web伺服器的事情。一般不用。看這兩個web伺服器的錯誤日誌

⑸ php非同步調試和線上調試網站程序

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 = "http://www.111cn.net/"; fopen($site,"r") or exit("Unable to connect to $site"); ?>

<?php $site = "http://www.111cn.net/"; fopen($site,"r") or die("Unable to connect to $site"); ?>

var_mp()和print_r()

var_mp -- 列印變數的相關信息

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

此函數顯示關於一個或多個表達式的結構信息,包括表達式的類型與值。數組將遞歸展開值,通過縮進顯示其結構。

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

代碼如下

<?php

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

var_mp ($a);

$b = 3.1;

$c = TRUE;

var_mp($b,$c);

?>

var_mp()可以輸出多個變數,如:var_mp($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.")";

}

}


;

⑹ debug.php調試文件應該放哪裡

開啟debug調試模式,只需要主入口文件裡面定義一個常量。
define(『APP_DEBUG』,TRUE); //開啟調試模式
然後在配置文件config.php裡面定義一個參數開啟頁面trace顯示信息,如下
『SHOW_PAGE_TRACE』 =>true, //開啟頁面Trace
這樣就已經配置好了,開啟調試模式後項目會去載入thinkphp核心包的Conf目錄下面的默認的debug.php文件,你也可以在你的項目配置目錄下面自定義一個debug.php,這樣就可以覆蓋核心包裡面的默認文件了,我們來看下默認的debug.php都是配置一些什麼參數
return array(
'LOG_RECORD'=>true, // 進行日誌記錄
'LOG_EXCEPTION_RECORD' =>
true, // 是否記錄異常信息日誌!

⑺ thinkphp5.0日誌詳情

這就是 thinkPHP 在開發模式下內置的調試工具和函數如 Trace 在 log 中記錄的對當前請求的詳細信息;這些調試信息在 console 瀏覽器控制台也可以看到;在正式上線後應該關閉調試模式即可;

調試模式並不能完全滿足我們調試的需要,有時候我們需要手動的輸出一些調試信息。除了本身可以藉助一些開發工具進行調試外,ThinkPHP還提供了一些內置的調試工具和函數。

官方說明文檔地址

網頁鏈接

網頁鏈接

⑻ thinkphp怎麼開啟調試模式

thinkphp開啟調試模式的方法:

1、開啟調試模式,首先在入口文件打開調試開關:

//開啟調試模式
define('APP_DEBUG',true);

2、然後需要配置調試文件,該文件位於項目配置目錄下,默認名字為 debug.php:

<?php
return array(
// 開發環境配置信息
'DB_TYPE' =>'mysql',
'DB_HOST' =>'localhost',
'DB_NAME' =>'mydb',
'DB_USER' =>'root',
'DB_PWD' =>'root123',
'DB_PORT' =>'3306',
'DB_PREFIX' =>'my_',
);
?>

配置完調試配置文件之後,調試模式就配置成功了。

3、在 Index 模塊的 index 操作寫入如下測試代碼:

public function index(){
$Dao = M('User');
$user_list = $Dao->select();
$this->display();
}
4、在頁面上雖然沒有做任何邏輯輸出,但是卻有系統調試信息,下面是頁面 Trace 信息截圖:

⑼ PHP調試函數和日誌記錄函數分享

網站程序開發過程經常需要調試,發布階段也需要記錄運行日誌,方便發現問題和還原事件。這就要求有調試和日誌記錄功能。
下面分別寫了用於調試的函數和用於記錄錯誤的函數。
使用方法很簡單,且自動根據日期生成日誌文件:
復制代碼
代碼如下:
//調試時,多個參數都可以:
sysdebug("hello");
sysdebug("hello",
"tiger
is
coming
now");
//錯誤記錄也一樣:
syserror("error");
syserror("error",
"unfortunately
tiger
is
dead
",
"we
are
sad");

閱讀全文

與php調試日誌相關的資料

熱點內容
dvd光碟存儲漢子演算法 瀏覽:757
蘋果郵件無法連接伺服器地址 瀏覽:962
phpffmpeg轉碼 瀏覽:671
長沙好玩的解壓項目 瀏覽:144
專屬學情分析報告是什麼app 瀏覽:564
php工程部署 瀏覽:833
android全屏透明 瀏覽:736
阿里雲伺服器已開通怎麼辦 瀏覽:803
光遇為什麼登錄時伺服器已滿 瀏覽:302
PDF分析 瀏覽:484
h3c光纖全工半全工設置命令 瀏覽:143
公司法pdf下載 瀏覽:381
linuxmarkdown 瀏覽:350
華為手機怎麼多選文件夾 瀏覽:683
如何取消命令方塊指令 瀏覽:349
風翼app為什麼進不去了 瀏覽:778
im4java壓縮圖片 瀏覽:362
數據查詢網站源碼 瀏覽:150
伊克塞爾文檔怎麼進行加密 瀏覽:892
app轉賬是什麼 瀏覽:163