PHP难以理解的控制流程

时间:2014-11-02 21:27:20

标签: php

我已经用PHP完成了一些项目,但我还远未成为专家。我现在正在尝试调试其他人编写的应用程序。

代码中有一点我无法理解,而且我的想法不合适。这是一些背景信息。

代码应该检索PDF文件并使用显示的PDF文件呈现页面 内部div。对于某些文件,这有效。对于其他文档,PDF文件将发送到客户端(打开浏览器下载对话框),不显示任何页面。

我添加了大量fwrite,以便在呈现页面时将某些操作记录到日志文件中。令我惊讶的是,我有以下情况:

fwrite($fh, "HERE3\n");

$templateMgr =& TemplateManager::getManager();

fwrite($fh, "HERE4\n");

正确呈现网页时,会记录两行(' HERE3'' HERE4')。 当页面完全没有呈现并且PDF文件被发送下载时,只有' HERE3'已记录。

让我感到困惑的是如何发生这种情况:两条日志行之间没有 if 返回!我没有记录第二行的代码的唯一解释是它在记录' HERE3'之后崩溃了。但是,我会期待两者中的任何一个:

  1. 代码记录两行并一直持续到结束并呈现页面(OK)或
  2. 代码仅记录第一行,然后崩溃并且不产生任何输出。相反,程序将PDF文件发送给客户端。
  3. 我还记录了对getManager()的调用,它返回时没有崩溃。

    所以,我的问题是,这个代码如何在函数调用后中断执行,并产生有意义的输出?

1 个答案:

答案 0 :(得分:2)

什么是Template::getManager背后的代码? 你的代码中可能有一个exit;

在使用exit;发送http下载输出后调用header()是一种常见的用法,因为它知道此功能不会停止脚本,而是具有重定向行为。通常你不需要其余的来执行。所以一定要检查退出功能;)