PHP 程式設計師解決問題能力的6個級別

2021-10-06 00:23:54 字數 2074 閱讀 1715

參考:

青銅 var_dump/die列印變數值資訊單步除錯

是最簡單粗暴有效的解決問題方法。高階一點的是使用列印日誌。

** 會設定各種錯誤日誌的記錄和顯示,並根據各種錯誤日誌分析錯誤或者搜尋別人的解決方案

php.ini 設定錯誤記錄

display_errors = on

error_reporting = e_all | e_strict

error_log = /data/wwwlogs/php_errors.log

display_startup_errors = on

log_errors = on

php-fpm.conf 設定錯誤日誌記錄並記錄慢日誌

error_log = /data/wwwlogs/php-fpm.error.log

log_level = warning

request_slowlog_timeout = 1

slowlog = /data/wwwlogs/php-fpm.slow.log

nginx 設定錯誤日誌記錄

error_log /data/wwwlogs/error_nginx.log crit;
檢視linux系統日誌

tail -f /var/log/messages
能熟練根據各種錯誤日誌排查問題,基本已經可以解決大部分的異常問題。

鉑金 存在多個版本的php或php-cli與php-fpm載入不同的配置

存在多個版本的php,懂得通過which php來看是哪個php。

當php-cli與php-fpm得到的執**況不一樣,php-cli下可以通過php -i |grep php.ini看載入了哪個php.ini。

fpm下通過phpinfo()函式可以看載入了哪個php.ini。

鑽石 使用strace/tcpdump工具跟蹤程式或抓包

strace可以用來檢視系統呼叫的執行,使用strace php test.php,或者strace -p 程序id。strace就可以幫助你透過現象看本質,掌握程式執行的過程。這個手段是在大型**,大公司裡最常用的。如果當然strace對於php **裡的死迴圈是解決不了的。比如你發現乙個php-fpm程序cpu100%了,strace恐怕是解決不了的。因為strace是看系統呼叫,一般都 是io類操作,既然是io密集,那cpu一定不可能是100%。

tcpdump可以抓到網絡卡的資料通訊過程,甚至資料內容也可以抓到。使用tcpdump可以看到網路通訊過程是什麼樣的,如何時發起了tcp syn3次握手,何時傳送fin包,何時傳送rst包。這是乙個基本功,如果不懂tcpdump,證明不具備網路問題解決能力。

星耀 統計函式呼叫的耗時和成功率,分析系統慢的主要原因

使用xhporf/xdebug匯出php請求的呼叫過程,然後分析每個函式呼叫的過程和耗時。能夠分析php程式的效能瓶頸,找出可以優化的點。

另外乙個對於網路服務的呼叫,如mysql查詢,curl,其他api呼叫等,通過記錄起始和結束時microtime,返回的是不是false, 可以得到呼叫是否成功,耗時多少。

通過nginx access.log 找到返回慢的主要介面:

查詢介面響應時間大於1秒的請求數量

grep user_msg.php access.log |grep post |awk -f'up_resp_time' '' |awk -f'\"' '$3>1'|wc -l
通過php-fpm.slow.log 檢視介面什麼地方呼叫比較慢:

查詢慢的函式呼叫比例:

grep -e 'script_filename.*user_msg' -a 3 php-fpm.slow.log   | awk '' |grep -v = |sort |uniq -c
王者 gdb使用

gdb是c/c++除錯程式的利器,需要具備一定c/c++功底的程式設計師才會能熟練使用gdb。上面說的strace無法跟蹤php程式cpu100%,而gdb是可以跟蹤的。另外gdb也可以解決php程式core dump的問題。

關於PHP程式設計師解決問題的能力

這個話題老生長談了,在面試中必然考核的能力中,我個人認為解決問題能力是排第一位的,比學習能力優先順序更高。解決問題的能力既能看出程式設計師的思維能力,應變能力,探索能力等,又可以看出他的經驗。如果解決問題能力不佳是無法通過面試的。這裡舉個例子,假如我執行了乙個php的指令碼,如php test.ph...

關於PHP程式設計師解決問題的能力

假如我執行了乙個php的指令碼,如php test.php,預期是可以返回乙個字串。但執行後沒有任何資訊輸出,這時候通過什麼方法能知道程式錯在 這裡可以將解決問題能力分為8個等級,越到後面的表示能力越強。lv0 檢視php錯誤資訊 程式沒有達到預期效果,證明 出錯了,看php的錯誤資訊是第一步。如果...

關於PHP程式設計師解決問題的能力

這個話題老生長談了,在面試中必然考核的能力中,我個人認為解決問題能力是排第一位的,比學習能力優先順序更高。解決問題的能力既能看出程式設計師的思維能力,應變能力,探索能力等,又可以看出他的經驗。如果解決問題能力不佳是無法通過面試的。這裡舉個例子,假如我執行了乙個php的指令碼,如php test.ph...