1. phpstorm有幾種調試方法
[ThinkPHP框架開啟調試模式]
ThinkPHP有專門為開發過程而設置的調試模式,開啟調試模式後,會犧牲一定的執行效率,但帶來的方便和除錯功能非常值得。
如何開啟
開啟調試模式很簡單,只需要在入口文件中增加一行常量定義代碼。在完成開發階段部署到生產環境後,只需要關閉調試模式或者刪除調試模式定義代碼即可切換到部署模式。
<?php
// 開啟調試模式
define('APP_DEBUG', true);
// 定義應用目錄
define('APP_PATH', './Application/');
// 載入框架入口文件
require './ThinkPHP/ThinkPHP.php';
調試模式的優點在於:
開啟日誌記錄,任何錯誤信息和調試信息都會詳細記錄,便於調試;關閉模板緩存,模板修改可以即時生效;
記錄SQL日誌,方便分析SQL;
關閉欄位緩存,數據表欄位修改不受緩存影響;嚴格檢查文件大小寫(即使是Windows平台),幫助你提前發現Linux部署可能導致的隱患問題;通過頁面Trace功能更好的調試和發現錯誤;
[日誌]
日誌的處理工作是由系統自動進行的,在開啟日誌記錄的情況下,會記錄下允許的日誌級別的所有日誌信息。
框架默認是在調試模式下記錄日誌信息,如果需要在部署模式下開啟日誌記錄,需要在配置中開啟LOG_RECORD參數,以及可以在應用配置文件中配置需要記錄的日誌級別。日誌的記錄並非實時保存的,只有當當前請求完成或者異常結束後才會實際寫入日誌信息,否則只是記錄在內存中。
'LOG_RECORD' => true, // 開啟日誌記錄
'LOG_LEVEL' =>'EMERG,ALERT,CRIT,ERR', // 只記錄EMERG ALERT CRIT ERR 錯誤手動記錄日誌
這里,主要介紹下利用框架提供的Log日誌類的三個方法來手動記錄日誌。
Log::record(),記錄日誌信息到內存。
\Think\Log::record('測試日誌信息');
\Think\Log::record('測試日誌信息,這是警告級別','WARN');//默認的話記錄的日誌級別是ERR,也可以指定日誌級別Log::save(),把保存在內存中的日誌信息(用指定的記錄方式)寫入。
由於系統在請求結束後會自動調用Log::save方法,所以通常,你只需要調用Log::record記錄日誌信息即可。
Log::write(),實時寫入一條日誌信息。
採用record方法記錄的日誌信息不是實時保存的,如果需要實時記錄的話,可以採用write方法。write方法寫入日誌的時候 不受配置的允許日誌級別影響,可以實時寫入任意級別的日誌信息。
\Think\Log::write('測試日誌信息,這是警告級別,並且實時寫入','WARN');[利用Xdebug工具]
參見我寫的另外一篇文章,Mac下給PhpStorm安裝調試工具Xdebug[變數調試]
變數調試對於簡單的問題可以起到很快捷的調試作用,有時候通過對變數的觀察可以迅速定位到問題位置,但是對比使用Xdebug方法,缺乏流程性和整體觀。
echo方法
echo 輸出一個或者多個字元串或變數值,多個值之間用逗號分隔,他是php語句,不是函數。因為他不是函數,所以沒有返回值,不能作為表達式的一部分使用。
echo $str,'world','hello!';
echo $str;
print方法
print()用於輸出一個或多個字元串或變數值的信息。它只能列印出簡單類型變數的值(如int,string),不能列印數組和對象。稍慢於echo。
print_r方法
可以把字元串和數字簡單地列印出來,而數組則以括起來的鍵和值得列表形式顯示,並以Array開頭。print_r返回值是布爾型的,參數是mix類型的,可以是字元串,整形,數組,對象類print_r() 顯示關於一個變數的易於理解的信息。如果給出的是 string、integer 或 float,將列印變數值本身。如果給出的是 array,將會按照一定格式顯示鍵和元素。print_r() 對數組作用後將把數組的指針移到最後邊。使用 reset() 可讓指針回到開始處。
$data = ['test1', 'test2', 'test3', 'test' => 'test'];print_r($data);//Array ( [0] => test1 [1] => test2 [2] => test3 [test] => test )var_mp方法
用於顯示關於一個或多個表達式的結構信息,包括表達式的類型與值。數組將遞歸展開值,通過縮進顯示其結構。信息比較詳細,用的較多。
$data = ['test1', 'test2', 'test3', 'test' => 'test'];var_mp($data);
array (size=4)
//輸出
0 => string 'test1' (length=5)
1 => string 'test2' (length=5)
2 => string 'test3' (length=5)
'test' => string 'test' (length=4)
mp方法
mp不是php方法,屬於ThinkPHP框架自帶的,工能和var_mp差不多。
[性能調試]
開發過程中,有些時候為了測試性能,經常需要調試某段代碼的運行時間或者內存佔用開銷,系統提供了G方法可以很方便的獲取某個區間的運行時間和內存佔用情況。
G('begin','end') 表示統計begin位置到end位置的執行時間(單位是秒),begin必須是一個已經標記過的位置,如果這個時候end位置還沒被標記過,則會自動把當前位置標記為end標簽,輸出的結果類似於:0.0056sG('begin');
$data = ['test1', 'test2', 'test3', 'test' => 'test'];//這里是其他代碼G('end');
echo G('begin', 'end', 5) . 's';//數字代表保留幾位小數如果環境支持內存佔用統計的話,還可以使用G方法進行區間內存開銷統計(單位為kb)G('begin','end','m').'kb';
[模型調試]
調試執行的SQL語句
用getLastsql方法來輸出上次執行的sql語句,有時候數據不符合預期時,用此方法可以方便的觀察查詢語句,判斷邏輯是否有誤。
$User = M("User"); // 實例化User對象
$User->find(1);
echo $User->getLastSql();
// 3.2版本中可以使用簡化的方法
echo $User->_sql();
調試資料庫錯誤信息
CURD操作如果返回值為false,表示資料庫操作發生錯誤,這個時候就需要使用模型的getDbError方法來查看資料庫返回的具體錯誤信息。
$User = M("User"); // 實例化User對象
$result = $User->find(1);
if(false === $result){
echo $User->getDbError();
}
文/竹影林風(簡書作者)
原文鏈接:http://www.jianshu.com/p/144d0df5abe4著作權歸作者所有,轉載請聯系作者獲得授權,並標注「簡書作者」。
2. php7調試怎麼在phpstorm中設置
在max上用phpstorm里debug調試php
背景
最近為了完成某個需求,在看`smarty`源碼,當我嘗試直接看,痛苦的快吐血,工欲善其事必先利器,雖然之前一直使用phpstorm調試nodejs,但是還沒有用phpstorm來debug過php。
建議
先看看這個:PhpStorm 8.0.2 Help :: Configuring Xdebug
## 安裝xdebug
1. 打開:Xdebug: Downloads 點擊source來下載源碼包
2. 然後安裝
```bash
解壓tar包
tar -xzf xdebug-2.2.5.tgz
進入根目錄
cd xdebug-2.2.5
執行phpize
phpize
編譯安裝xdebug
./configure --enable-xdebug
make
make install
```
配置到php
1. 打開php.ini文件
```bash
cd /private/etc/
#默認沒有php.ini,需要拷貝一下
sudo cp php.ini.default php.ini
sudo vi php.ini
```
2. 在下面加入
```bash
[Xdebug]
zend_extension="/usr/local/php_user/xdebug.so"
xdebug.remote_enable = on
;xdebug.remote_handler=dbgp
xdebug.remote_host="127.0.0.1"
xdebug.remote_port=9000
xdebug.profiler_enable = 1
xdebug.profiler_enable_trigger = off
xdebug.profiler_output_name = cachegrind.out.%t.%p
xdebug.remote_autostart = on
```
3. 重啟`apache`
```bash
sudo apachectl restart
```
4. 查看phpinfo()信息裡面搜索一下`debug`如果有,成功。
配置phpstorm
1. 打開phpstorm,進入頂部導航`phpstrom->perferences..`
2. 點擊`php`項,點擊`interpreter`後面的`...`按鈕
3. 點擊`php home`後面的刷新(`...`後面)按鈕
4. 這時候你將看到`Debugger: Not installed`變成`Xdebug 2.3.2`(版本號可能不同)
6. 進入`php`欄目下的`Server`,點擊`+`新建一個server:host填寫你本地的host(如127.0.0.1),點擊`apply`保存,並退出`perferences`對話框。
7. 點擊頂部導航`run`->點擊`+`->選擇`PHP Web Application`->選擇上一步新建的`server`,`start URL`填入,你要debug的php文件地址,下面會生成一個地址,這個地址在瀏覽器應該能正常瀏覽測試的;點擊`apply`進行保存。
開始愉快的使用
1. 在你要debug的文件行數字右側一列,點擊一下就會有一個斷點。
2. 點擊頂部導航`run`->debug,選擇你剛剛新建的`debug`名稱,這時候會彈出瀏覽器載入這個php文件了
3. phpstorm 中是怎樣調試PHP
## 配置到php
1. 打開php.ini文件
```bash
cd /private/etc/
#默認沒有php.ini,需要拷貝一下
sudo cp php.ini.default php.ini
sudo vi php.ini
```
2. 在下面加入
```bash
[Xdebug]
zend_extension="/usr/local/php_user/xdebug.so"
xdebug.remote_enable = on
;xdebug.remote_handler=dbgp
xdebug.remote_host="127.0.0.1"
xdebug.remote_port=9000
xdebug.profiler_enable = 1
xdebug.profiler_enable_trigger = off
xdebug.profiler_output_name = cachegrind.out.%t.%p
xdebug.remote_autostart = on
```
3. 重啟`apache`
```bash
sudo apachectl restart
```
4. 查看phpinfo()信息裡面搜索一下`debug`如果有,你成功了。
## 配置phpstorm
1. 打開phpstorm,進入頂部導航`phpstrom->perferences..`
2. 點擊`php`項,點擊`interpreter`後面的`...`按鈕
3. 點擊`php home`後面的刷新(`...`後面)按鈕
4. 這時候你將看到`Debugger: Not installed`變成`Xdebug 2.3.2`(版本號可能不同)
6. 進入`php`欄目下的`Server`,點擊`+`新建一個server:host填寫你本地的host(如127.0.0.1),點擊`apply`保存,並退出`perferences`對話框。
7. 點擊頂部導航`run`->點擊`+`->選擇`PHP Web Application`->選擇上一步新建的`server`,`start URL`填入,你要debug的php文件地址,下面會生成一個地址,這個地址在瀏覽器應該能正常瀏覽測試的;點擊`apply`進行保存。
## 開始愉快的使用
1. 在你要debug的文件行數字右側一列,點擊一下就會有一個斷點。
2. 點擊頂部導航`run`->debug,選擇你剛剛新建的`debug`名稱,這時候會彈出瀏覽器載入這個php文件了。
4. phpstorm 中是怎樣調試PHP
## 配置phpstorm
1. 打開phpstorm,進入頂部導航`phpstrom->perferences..`
2. 點擊`php`項,點擊`interpreter`後面的`...`按鈕
3. 點擊`php home`後面的刷新(`...`後面)按鈕
4. 這時候你將看到`Debugger: Not installed`變成`Xdebug 2.3.2`(版本號可能不同)
6. 進入`php`欄目下的`Server`,點擊`+`新建一個server:host填寫你本地的host(如127.0.0.1),點擊`apply`保存,並退出`perferences`對話框。
7. 點擊頂部導航`run`->點擊`+`->選擇`PHP Web Application`->選擇上一步新建的`server`,`start URL`填入,你要debug的php文件地址,下面會生成一個地址,這個地址在瀏覽器應該能正常瀏覽測試的;點擊`apply`進行保存。
## 開始愉快的使用
1. 在你要debug的文件行數字右側一列,點擊一下就會有一個斷點。
2. 點擊頂部導航`run`->debug,選擇你剛剛新建的`debug`名稱,這時候會彈出瀏覽器載入這個php文件了。
5. phpstorm 中是怎樣調試PHP
配置好apache
apache 目錄下 httpd.conf (搜索關鍵字)
1、默認監聽埠 Listen 80
2、documentroot 的目錄
訪問 localhost 即可訪問 documentroot 目錄了
將項目文件放置在 documentroot 目錄下。phpstorm 中 f12(瀏覽器打開) 即可調試 localhost
6. phpstorm微信開發怎麼調試
[ThinkPHP框架開啟調試模式]
ThinkPHP有專門為開發過程而設置的調試模式,開啟調試模式後,會犧牲一定的執行效率,但帶來的方便和除錯功能非常值得。
如何開啟
開啟調試模式很簡單,只需要在入口文件中增加一行常量定義代碼。在完成開發階段部署到生產環境後,只需要關閉調試模式或者刪除調試模式定義代碼即可切換到部署模式。
<?php
// 開啟調試模式
define('APP_DEBUG', true);
// 定義應用目錄
define('APP_PATH', './Application/');
// 載入框架入口文件
require './ThinkPHP/ThinkPHP.php';
調試模式的優點在於:
開啟日誌記錄,任何錯誤信息和調試信息都會詳細記錄,便於調試;關閉模板緩存,模板修改可以即時生效;
記錄SQL日誌,方便分析SQL;
關閉欄位緩存,數據表欄位修改不受緩存影響;嚴格檢查文件大小寫(即使是Windows平台),幫助你提前發現Linux部署可能導致的隱患問題;通過頁面Trace功能更好的調試和發現錯誤;
[日誌]
日誌的處理工作是由系統自動進行的,在開啟日誌記錄的情況下,會記錄下允許的日誌級別的所有日誌信息。
框架默認是在調試模式下記錄日誌信息,如果需要在部署模式下開啟日誌記錄,需要在配置中開啟LOG_RECORD參數,以及可以在應用配置文件中配置需要記錄的日誌級別。日誌的記錄並非實時保存的,只有當當前請求完成或者異常結束後才會實際寫入日誌信息,否則只是記錄在內存中。
'LOG_RECORD' => true, // 開啟日誌記錄
'LOG_LEVEL' =>'EMERG,ALERT,CRIT,ERR', // 只記錄EMERG ALERT CRIT ERR 錯誤手動記錄日誌