这是关于在编写PHP代码时可能遇到的警告、错误和通知的一系列答案,如果你对如何修复它们一无所知,可以参考这个列表。这也是一个社区维基,所以每个人都可以参与其中,添加和维护这个列表。
像“Headers already sent”或“Calling a member of a non-object”这样的问题在Stack Overflow上经常出现。这些问题的根本原因总是相同的。因此,对这些问题的答案通常会重复解释并显示给OP在他们特定情况下需要更改的行。这些答案对网站没有任何价值,因为它们只适用于OP的特定代码。其他遇到相同错误的用户无法轻松地从中读取解决方案,因为它们过于局限。这是令人遗憾的,因为一旦你理解了根本原因,修复错误就是微不足道的。因此,这个列表试图以一种通用的方式解释解决方案。
如果你的问题被标记为这个问题的重复,请在下面找到你的错误信息并将修复方法应用到你的代码中。答案通常包含进一步的链接,以便在仅仅通过通用答案无法明确解决问题时进行调查。
如果你想贡献,请在每个答案中添加你“最喜欢”的错误信息、警告或通知,以及它的简短描述(即使只是突出显示与它们手册页面相关的术语)、可能的解决方案或调试方法,以及有价值的现有Q&A的列表。同时,欢迎改进任何现有答案。
警告:mysql_fetch_array():提供的参数不是有效的MySQL结果资源
另外,请参见:
警告:無法修改頭訊息 - 頭部已發送
當您的腳本嘗試向客戶端發送HTTP頭部時,但在此之前已經有輸出,導致頭部已經發送到客戶端。
這是一個
E_WARNING
,它不會停止腳本的執行。一個典型的例子是像這樣的模板檔案:
session_start()
函數將嘗試向客戶端發送帶有會話cookie的頭部。但是當PHP將元素寫入輸出流時,已經發送了頭部。您需要將
session_start()
移到頂部。您可以透過檢查觸發警告的程式碼之前的程式碼行,並查看輸出位置來解決此問題。將任何發送頭部的代碼移到該代碼之前。
經常被忽略的輸出是PHP結束標記
?>
後的換行符號。一般認為,當它是文件中的最後一個內容時,省略?>
是一種標準做法。同樣,此警告的另一個常見原因是在開頭的之前有一個空格、換行符或不可見字符,導致Web伺服器發送頭部和空白/換行符,因此當PHP開始解析時無法提交任何頭部。
如果您的檔案中有多個
程式碼區塊,請確保它們之間沒有任何空格。 (注意:如果您有自動產生的程式碼,可能會有多個程式碼區塊)
也請確保您的程式碼中沒有任何位元組順序標記(Byte Order Marks),例如腳本的編碼為UTF-8帶有BOM。
相關問題: