这是关于在编写PHP代码时可能遇到的警告、错误和通知的一系列答案,如果你对如何修复它们一无所知,可以参考这个列表。这也是一个社区维基,所以每个人都可以参与其中,添加和维护这个列表。
像“Headers already sent”或“Calling a member of a non-object”这样的问题在Stack Overflow上经常出现。这些问题的根本原因总是相同的。因此,对这些问题的答案通常会重复解释并显示给OP在他们特定情况下需要更改的行。这些答案对网站没有任何价值,因为它们只适用于OP的特定代码。其他遇到相同错误的用户无法轻松地从中读取解决方案,因为它们过于局限。这是令人遗憾的,因为一旦你理解了根本原因,修复错误就是微不足道的。因此,这个列表试图以一种通用的方式解释解决方案。
如果你的问题被标记为这个问题的重复,请在下面找到你的错误信息并将修复方法应用到你的代码中。答案通常包含进一步的链接,以便在仅仅通过通用答案无法明确解决问题时进行调查。
如果你想贡献,请在每个答案中添加你“最喜欢”的错误信息、警告或通知,以及它的简短描述(即使只是突出显示与它们手册页面相关的术语)、可能的解决方案或调试方法,以及有价值的现有Q&A的列表。同时,欢迎改进任何现有答案。
警告:mysql_fetch_array():提供的参数不是有效的MySQL结果资源
另外,请参见:
Avertissement : Impossible de modifier les informations d'en-tête - l'en-tête a été envoyé
Lorsque votre script essaie d'envoyer des en-têtes HTTP au client, mais qu'il y a déjà une sortie auparavant, les en-têtes ont déjà été envoyés au client.
C'est un
E_WARNING
, cela n'arrête pas l'exécution du script.Un exemple typique est un fichier modèle comme celui-ci :
session_start()
函数将尝试向客户端发送带有会话cookie的头部。但是当PHP将元素写入输出流时,已经发送了头部。您需要将
session_start()
Déplacer vers le haut.Vous pouvez résoudre ce problème en vérifiant la ligne de code avant le code qui a déclenché l'avertissement et en voyant où se trouve la sortie. Déplacez tout code qui envoie des en-têtes avant ce code.
Un élément de sortie souvent négligé est une balise de fermeture PHP
?>
后的换行符。一般认为,当它是文件中的最后一个内容时,省略?>
是一种标准做法。同样,此警告的另一个常见原因是在开头的précédée d'un espace, d'une nouvelle ligne ou d'un caractère invisible, ce qui oblige le serveur Web à envoyer des en-têtes et des espaces/nouvelles lignes afin qu'aucun en-tête ne puisse être soumis lorsque PHP commence l'analyse.
Si vous avez plusieurs blocs de code
dans votre fichier, assurez-vous qu'il n'y a pas d'espace entre eux. (Remarque : si vous disposez d'un code généré automatiquement, il peut y avoir plusieurs blocs de code)
Assurez-vous également que vous n'avez aucune marque d'ordre d'octet dans votre code, par exemple, le script est codé en UTF-8 avec BOM.
Questions connexes :