国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

PHP性能殺手--Deprecated錯誤

0xE7A38A / 872人閱讀

摘要:發(fā)現問題最近剛剛完成了一個項目,基本功能都正常后,就發(fā)布到線上。分析問題錯誤的原因是不推薦使用函數處理正則表達式。用替換掉后不僅錯誤沒了,而且性能也大大提高了。錯誤存在潛在的兼容性問題,要引起大家的重視。

發(fā)現Deprecated問題

最近剛剛完成了一個項目,基本功能都正常后,就發(fā)布到線上。結果上線一會兒就發(fā)現產生了大量的錯誤,如下圖

一看都是PHP的Deprecated錯誤,是級別最低的那種。
PHP官方手冊對錯誤級別的解釋如下:

參看:PHP官方說明

查找Deprecated問題

查看了第一條的詳細信息,


由上圖可以看出,錯誤原因是在common.ini.php中使用了eregi函數,引發(fā)了Deprecated錯誤。
問題代碼在common.ini.php的52行。
查看代碼:

phperegi(".([^.]*$)", $fileName, $ extension);

產生的錯誤,這是一個獲取文件后綴名的正則表達式。

分析Deprecated問題

錯誤的原因是PHP不推薦使用eregi函數處理正則表達式。
引用PHP官方5.3兼容文檔,其表述如下:

參看:PHP官方說明

PHP官方指出,PHP5.3不推薦使用eregi函數,建議使用preg_match函數代替。

解決Deprecated問題

接下來把eregi換成perg_match,然后對正則表達式進行修改。
采用perg_match的代碼如下:

phppreg_match("/.([^.]*$)/", $fileName, $ extension);

這樣Deprecated錯誤就沒有了。

研究Deprecated問題

一般情況下,Deprecated 錯誤即使不修復也不影響運行的,但是對性能是否會有影響呢?
先做一個錯誤輸出的對比試驗,關閉display_error輸出。
代碼如下:

php

結果是:
[有Deprecated]processing time: 0.51678085327148
[無Deprecated]processing time: 0.31887912750244

證明,開啟Deprecated 的error_reporting后,性能比關閉下降了一倍。具體原因與下面的Notice一樣。
我們再做個試驗,分別寫了兩個PHP程序,一個是存在Deprecated錯誤的代碼,另一個是修復了Deprecated的代碼,代碼如下:

跑起來看看結果:
trigger deprecated: 0.33528900146484
trigger no deprecated: 0.019602060317993

兩的性能相差17.63倍。用preg_match 替換掉ereg后不僅Deprecated錯誤沒了,而且性能也大大提高了。
性能提高的原因是Perl比POSIX處理正則表達式速度更快。

Deprecated錯誤存在潛在的兼容性問題,要引起大家的重視。
所有提示Deprecated的函數都是官方不推薦使用,今后新版的PHP有可能對其不兼容。
最典型的案例是PHP5.5.0以后已經不再兼容mysql_query和mysql_connect。
要保證升級PHP版本后,程序正常運行,需要使用mysqli和PDO來訪問數據庫。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/20959.html

相關文章

  • PHP 錯誤與異常

    摘要:但異常捕獲后程序可以繼續(xù)執(zhí)行,而真正的錯誤出現后程序就必須終止異常可以使用來捕獲捕獲,捕獲之后后續(xù)代碼可以繼續(xù)執(zhí)行而錯誤是無法使用捕獲的如果拋出了異常,就必須捕獲它否則程序終止執(zhí)行。 PHP錯誤級別 Parse error > Fatal Error > Waning > Notice > Deprecated Deprecated 最低級別的錯誤(不推薦,不建議)使用一些過期函數的...

    longmon 評論0 收藏0
  • 讓我偷偷的告訴你:運維加薪的殺手锏是啥?

    摘要:但是怎么提加薪比較好呢現在讓小編簡單介紹下加薪的個殺手锏第一有備而戰(zhàn),一切讓業(yè)績說話不要和老板大談你正在貸款,買車買房。。。你必須向公司證明你值得加薪,用數據來證明你的業(yè)績顯然是再明智不過的。 臨近年底,辛辛苦苦一年該如何跟老板開口談加薪成了運維人的心病。但是怎么提加薪比較好呢?現在讓小編簡單介紹下加薪的 3 個殺手锏: 第一、有備而戰(zhàn),一切讓業(yè)績說話 不要和老板大談你正在貸款...

    monw3c 評論0 收藏0
  • PHP 7 修改了什么呢 -- 2

    摘要:風格的構造函數式構造函數,它與類的名稱相同,因為它們是在所定義類的方法,現在已過時,并且將在未來被移除。如果的構造僅僅是一個類中定義構造函數,將發(fā)出。類實現構造函數方法不受影響。 PHP7 - use語句 從PHP7起,單次使用 use 語句可以用來從同一個命名空間導入類,函數和常量(而不用多次使用 use 語句)。示例 PHP7 - 錯誤處理 從PHP7,錯誤處理和報告已經改變。P...

    leeon 評論0 收藏0
  • php error_reporting()關閉報錯

    摘要:至,有同樣的行為。表示關閉所有錯誤報告表示顯示二函數說明設置應該報告何種錯誤說明函數能夠在運行時設置指令。后果是導致腳本終止不再繼續(xù)運行。初始化啟動過程中發(fā)生的警告非致命錯誤。用戶產少的警告信息。出外的所有錯誤和警告信息。 錯誤報告級別:指定了在什么情況下,腳本代碼中的錯誤(這里的錯誤是廣義的錯誤,包括E_NOTICE注意、E_WARNING警告、E_ERROR致命錯誤等)會以錯誤報告...

    noONE 評論0 收藏0
  • PHP7新特性小結

    摘要:標量類型聲明在中,引入了一個新的特性,即標量類型聲明。棄用樣式構造函數是與它們定義的類具有相同名稱的方法,現在已被棄用,并且將來將被刪除。 showImg(https://segmentfault.com/img/remote/1460000012438557?w=1024&h=456); 說明 PHP 7使用新的Zend Engine 3.0將應用程序性能提高近兩倍,內存消耗比PHP...

    Steven 評論0 收藏0

發(fā)表評論

0條評論

0xE7A38A

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<