Rujukan - Apakah maksud ralat ini dalam PHP?
P粉478445671
2023-08-27 15:07:53
<p><br /></p><h3>这是什么?</h3>
<p>这是一些关于您在 PHP 编程时可能遇到的警告、错误和通知的答案,但不知道如何修复它们。这也是一个社区 Wiki,因此邀请每个人参与添加和维护此列表。</p>
<h3>这是为什么?</h3>
<p>诸如“标头已发送”或“调用非对象的成员”之类的问题经常出现在 Stack Overflow 上。这些问题的根本原因总是相同的。因此,这些问题的答案通常会重复它们,然后向操作员展示在特定情况下要更改哪一行。这些答案不会给网站增加任何价值,因为它们仅适用于 OP 的特定代码。其他有相同错误的用户无法轻松地从中读出解决方案,因为它们太本地化了。这是可悲的,因为一旦你了解了根本原因,修复错误就变得微不足道了。因此,此列表试图以通用的应用方式解释该解决方案。</p>
<h3>我应该在这里做什么?</h3>
<p>如果您的问题已被标记为与此问题重复,请在下面找到您的错误消息并将修复应用于您的代码。答案通常包含进一步调查的链接,以防仅从一般答案中不清楚。</p>
<p>如果您想做出贡献,请添加您“最喜欢的”错误消息、警告或通知,每个答案一个,简短描述其含义(即使只是在其手册页中突出显示术语),可能的解决方案或调试方法以及有价值的现有问答列表。另外,请随意改进任何现有答案。</p>
<h2>列表</h2>
<ul>
<li>什么也没有看到。页面是空的、白色的。 (也称为<em>白页/死亡屏幕</em>)</li>
<li>代码无法运行/输出了我的 PHP 代码的一部分</li>
<li>警告:无法修改标头信息 - 标头已发送</li>
<li>警告:mysql_fetch_array() 期望参数 1 为资源,给定的布尔值。<p><br /></p><p>
警告:mysql_fetch_array():提供的参数不是有效的 MySQL 结果资源</p></li>
<li>警告:<em>[function]</em> 期望参数 1 为资源,给定布尔值</li>
<li>警告:<em>[功能]</em>:无法打开流:<em>[原因]</em></li>
<li>警告:open_basedir 限制生效</li>
<li>警告:除以零</li>
<li>警告:非法字符串偏移“XXX”</li>
<li>警告:count():参数必须是数组或实现 Countable 的对象</li>
<li>解析错误:语法错误,意外的“[”</li>
<li>解析错误:语法错误,意外 T_XXX</li>
<li>解析错误:语法错误,意外 T_ENCAPSED_AND_WHITESPACE</li>
<li>解析错误:语法错误,意外 T_PAAMAYIM_NEKUDOTAYIM</li>
<li>解析错误:语法错误、意外的“require_once”(T_REQUIRE_ONCE)、期望函数(T_FUNCTION)</li>
<li>解析错误:语法错误,意外的 T_VARIABLE</li>
<li>致命错误:允许的 XXX 字节内存大小已耗尽(尝试分配 XXX 字节)</li>
<li>致命错误:超出最大执行时间 XX 秒</li>
<li>致命错误:在非对象或 null 上调用成员函数...</li>
<li>致命错误:调用未定义的函数 XXX</li>
<li>致命错误:无法重新声明 XXX</li>
<li>致命错误:无法在写入上下文中使用函数返回值</li>
<li>致命错误:AAA::BBB() 的声明必须与 CCC::BBB() 的声明兼容'</li>
<li>AAA::BBB() 的返回类型应与 CCC::BBB() 兼容,或者应使用 #[ReturnTypeWillChange] 属性</li>
<li>致命错误:不在对象上下文中使用 $this</li>
<li>致命错误:类 Closure 的对象无法转换为字符串</li>
<li>致命错误:未定义的类常量</li>
<li>致命错误:未捕获类型错误:参数 #n 必须是给定的 x、y 类型</li>
<li>注意:数组到字符串转换 (< PHP 8.0) 或警告:数组到字符串转换 (>= PHP 8.0)</li>
<li>注意:尝试获取非对象属性错误</li>
<li>注意:未定义的变量或属性</li>
<li>“注意:未定义索引”或“警告:未定义数组键”</li>
<li>注意:未定义偏移 XXX [参考]</li>
<li>注意:未初始化的字符串偏移量:XXX</li>
<li>注意:使用未定义的常量 XXX - 假定为“XXX”/错误:未定义的常量 XXX</li>
<li>MySQL:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解在 ... 行附近使用的正确语法</li>
<li>严格标准:非静态方法<em>[<class>::<method>]</method></class></em>不应静态调用</li>
<li>警告:函数期望参数 X 为布尔值/字符串/整数</li>
<li>HTTP 错误 500 - 内部服务器错误</li>
<li>已弃用:已弃用带有大括号的数组和字符串偏移访问语法</li>
</ul>
<p>另请参阅:</p>
<ul>
<li>参考 - 这个符号在 PHP 中意味着什么?</li>
</ul><p><br /></p>
Amaran: Tidak dapat mengubah suai maklumat pengepala - pengepala sudah dihantar
Ini berlaku apabila skrip anda cuba menghantar pengepala HTTP kepada klien tetapi sudah ada output sebelum ini, menyebabkan pengepala telah dihantar kepada klien.
Ini adalah
E_WARNING
dan ia tidak menghalang skrip.Contoh biasa ialah fail templat seperti ini:
session_start()
函数将尝试将带有会话 cookie 的标头发送到客户端。但是 PHP 在将元素写入输出流时已经发送了标头。您必须将
session_start()
Bergerak ke atas.Anda boleh menyelesaikan masalah ini dengan melihat baris sebelum kod yang mencetuskan amaran dan menyemak di mana ia dikeluarkan. Alihkan sebarang kod penghantaran pengepala sebelum kod ini.
Output yang sering diabaikan ialah penghujung PHP
?>
之后的新行。当?>
是文件中的最后一个内容时,省略它被认为是一种标准做法。同样,此警告的另一个常见原因是当开头的apabila didahului oleh ruang, baris atau aksara yang tidak kelihatan, menyebabkan pelayan web menghantar pengepala dan ruang/baris baharu, jadi apabila PHP mula menghuraikan ia tidak akan dapat menyerahkan sebarang pengepala.
Jika anda mempunyai berbilang
blok kod dalam fail anda, tidak sepatutnya terdapat sebarang ruang di antaranya. (Nota: Jika anda mempunyai kod yang dibina secara automatik, anda mungkin mempunyai berbilang blok)
Juga pastikan anda tidak mempunyai sebarang tanda pesanan bait dalam kod anda, seperti apabila skrip dikodkan sebagai UTF-8 dengan BOM.
Soalan berkaitan: