亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在PHP中使用@運算符抑制錯誤

在PHP中使用@運算符抑制錯誤

PHP
楊__羊羊 2019-08-02 07:02:21
在PHP中使用@運算符抑制錯誤在您看來,使用@運算符來抑制PHP中的錯誤/警告是否有效,而您可能正在處理該錯誤?如果是的話,你會在什么情況下使用這個?歡迎使用代碼示例。編輯:注意回復者。我不打算關閉錯誤報告,但是,例如,通常的做法是使用@fopen($file);然后再查一查.。但是你可以通過做if (file_exists($file)){     fopen($file);}else{     die('File not found');}或者類似的。我想問題是-是否有任何地方“必須用以消除錯誤,而不能以任何其他方式處理?”
查看完整描述

3 回答

?
FFIVE

TA貢獻1797條經驗 獲得超6個贊

我會抑制錯誤處理它..否則你可能有一個TOCTOU問題(檢查時間,使用時間)。例如,文件可能會在file_ist返回true之后但在fopen之前被刪除)。

但我不會只是為了讓錯誤消失而壓制錯誤。這些最好是可見的。



查看完整回答
反對 回復 2019-08-03
?
九州編程

TA貢獻1785條經驗 獲得超4個贊

首先,我意識到99%的PHP開發人員使用錯誤抑制操作符(我曾經是其中之一),所以我希望任何PHP開發人員都會對此持不同意見。

在您看來,使用@運算符來抑制PHP中的錯誤/警告是否有效,而您可能正在處理該錯誤?

簡短答覆:
不!

更長更正確的答案:
我不知道,因為我不知道一切,但到目前為止,我還沒有遇到這樣的情況,這是一個很好的解決方案。

為什么是壞的:
在我認為使用PHP大約7年的時間里,我已經看到了錯誤抑制操作符所造成的無休止的調試痛苦,而且從來沒有遇到過不可避免的情況。

問題是,您正在消除錯誤的代碼段當前可能只會導致所看到的錯誤;但是,當您更改被抑制的行所依賴的代碼或它運行的環境時,很有可能該行將嘗試輸出與您試圖忽略的錯誤完全不同的錯誤。那么,如何跟蹤沒有輸出的錯誤呢?歡迎來到調試地獄!

我花了很多年才意識到,我每隔幾個月就會因為被壓制的錯誤而浪費多少時間。大多數情況下(但不只是如此),這是在安裝第三方腳本/應用程序/庫之后,在開發人員環境中沒有錯誤,但不是我的,因為php或服務器配置不同,或者缺少依賴,通常會立即輸出錯誤,提醒問題所在,而不是開發人員添加了魔術@。

替代品(視情況和預期結果而定):
處理您所知道的實際錯誤,這樣如果一段代碼將導致某個錯誤,那么它就不會在特定情況下運行。但我想你知道這個部分,你只是擔心最終用戶會看到錯誤,這就是我現在要解決的問題。

對于常規錯誤,您可以設置一個錯誤處理程序,以便在您查看頁面時以您希望的方式輸出這些錯誤,但對最終用戶隱藏這些錯誤并將其記錄下來,這樣您就可以知道您的用戶觸發了哪些錯誤。

對于致命錯誤集display_errors在php.ini中關閉(您的錯誤處理程序仍然被觸發)并啟用錯誤日志記錄。如果您有一個開發服務器和一個活動服務器(我建議這樣做),那么這個步驟在您的開發服務器上是不必要的,所以您仍然可以調試這些致命錯誤,而不必求助于查看錯誤日志文件。甚至有一個使用關機函數的技巧向錯誤處理程序發送大量致命錯誤。

總括而言:
請避開它。這可能有一個很好的理由,但我還沒有看到,所以直到那天,我才認為(@)錯誤抑制操作符是邪惡的。

你能讀懂我對錯誤控制操作符頁面的評論在PHP手冊中,如果你想要更多的信息



查看完整回答
反對 回復 2019-08-03
?
尚方寶劍之說

TA貢獻1788條經驗 獲得超4個贊

是的,壓制是有道理的。

例如,fopen()命令返回FALSE如果無法打開文件。很好,但是生成PHP警告消息。通常你不想要警告-你會檢查FALSE你自己。

事實上PHP手冊特別建議在本例中使用@!


查看完整回答
反對 回復 2019-08-03
  • 3 回答
  • 0 關注
  • 398 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號