【发布时间】:2014-11-02 21:27:20
【问题描述】:
我已经完成了几个 PHP 项目,但距离专家还很遥远。我现在正在尝试调试其他人编写的应用程序。
代码中有一点我不太理解,而且我没有想法。以下是一些背景信息。
该代码应该检索一个 PDF 文件并使用显示的 PDF 文件呈现一个页面
内部div。对于某些文件,这是有效的。对于其他文档,将 PDF 文件发送到客户端(打开浏览器下载对话框)并且不显示任何页面。
我添加了很多fwrite 来在页面呈现时将某些操作记录到日志文件中。令我惊讶的是,我有以下情况:
fwrite($fh, "HERE3\n");
$templateMgr =& TemplateManager::getManager();
fwrite($fh, "HERE4\n");
当页面正确呈现时,两行('HERE3' 和 'HERE4')都会被记录。 当页面根本不呈现并且发送 PDF 文件以供下载时,仅记录“HERE3”。
令我困惑的是这怎么可能发生:两条日志行之间没有 if 或 return!我对没有记录第二行的代码的唯一解释是它在记录“HERE3”后崩溃。但是,我希望两者中的任何一个:
- 代码记录这两行并一直持续到最后并呈现页面 (OK),或者
- 代码只记录第一行,然后崩溃并且不产生任何输出。相反,程序会向客户端发送一个 PDF 文件。
我还记录了对 getManager() 的调用,它返回时不会崩溃。
所以,我的问题是,这段代码如何在函数调用后中断执行,却产生有意义的输出?
【问题讨论】:
-
在不知道 getManager 做什么的情况下无法给出答案。
-
@WvanRij:但是子程序可以跳过脚本的其余部分并仍然产生响应吗?无论如何,getManager() 首先尝试从注册表中检索一个对象,如果找不到,它会创建一个新对象。构造函数非常复杂,我仍在尝试理解它。但是,子程序如何跳过脚本的其余部分并仍然产生输出?
-
@Giorgio php 脚本中的任何地方都可以调用
die;或exit;并且执行将在该点停止。
标签: php