0

我正在写这本书,我发现了一个意想不到的情况。

这本书说,在处理 PHP/HTML 混合文件时,如果我在没有 ob 缓冲区的情况下使用 PHP try/catch,并且如果文件中间某处出现错误,则 PHP 引擎将无法访问catch{} 行,因为一些输出已经发送到浏览器。然后书上说这种情况可以通过使用ob_start()、ob_end_clean() 和 ob_end_flush() 来解决

然而,当我使用本书的示例代码时,try/catch 工作得很好,没有ob 缓冲区的东西。说得很好,我的意思是如果出现异常,可以毫无问题地到达并执行 catch{} 行。

我用一个 Linode VPS 进行测试,PHP 版本是 5.3.2。我用一些普通的 Linode 脚本设置了 VPS。

这是为什么?:)

4

1 回答 1

2

这种说法是无稽之谈。try..catch无论输出是否已经发送到浏览器,PHP 的工作方式都如您所愿。

看到即使那本书的勘误表也包含错误,我会说它根本不是一本很好的书,并且对它包含错误的陈述一点也不感到惊讶。只需快速浏览一下即可发现:

在步骤 4 中,第三行代码应如下所示:

if ($_POST && isset($missing) && !empty($missing)) {

不,它实际上应该是:

if ($_POST && !empty($missing)) {

或者

if ($_POST && $missing) {

作者显然不明白如何使用empty.

更远:

步骤 2 中代码的第 4 行末尾缺少一个左大括号。它应该是:

if (!@include('includes/connection.inc.php')) {

这充满了不良做法,应该重写为:

if (!file_exists('includes/connection.inc.php')) {

或者:

require_once 'includes/connection.inc.php';

我敢肯定还有更多... :)

于 2012-05-25T04:27:03.750 回答