下面的代码段如何打印出“可读性不可读”? afaik a die()应该立即停止一切吗?
编辑:发布了完整的功能。这是Zend_Search_Lucene_Storage_File_Filesystem
的函数。我们总是得到“文件不可读”的错误。该文件看起来似乎是可读的,但下面的代码段打印出“可读性不可读”
编辑2:对不起,我发布的信息有些错误;一切都正确了。
public function __construct($filename, $mode='r+b')
{
global $php_errormsg;
if(strpos($mode, 'w') === false) {
die('not readable');
}
else die('readable');
if (strpos($mode, 'w') === false && !is_readable($filename)) {
// opening for reading non-readable file
require_once 'Zend/Search/Lucene/Exception.php';
throw new Zend_Search_Lucene_Exception('File \'' . $filename . '\' is not readable.');
}
$trackErrors = ini_get('track_errors');
ini_set('track_errors', '1');
$this->_fileHandle = @fopen($filename, $mode);
if ($this->_fileHandle === false) {
ini_set('track_errors', $trackErrors);
require_once 'Zend/Search/Lucene/Exception.php';
throw new Zend_Search_Lucene_Exception($php_errormsg);
}
ini_set('track_errors', $trackErrors);
}
答案 0 :(得分:7)
我要站出来说:
这是不可能的。
除非:你在echo
之前或者在析构函数/关闭函数中die()
'确定'其他地方。
来自与die()
相同的手册on exit()
:
终止脚本的执行。即使调用
exit()
,也将始终执行关闭函数和对象析构函数。
但是发布的代码本身不会产生'okok'的输出。
进行问题排查:
__file__
)和行号(__line__
)只是为了确保它确实与正在执行的行相同。答案 1 :(得分:3)
die()
触发执行关闭挂钩,因此第二次调用可能是属于击倒钩子的代码路径的一部分。
答案 2 :(得分:1)
答案可能是您的脚本中有一些内容导致违规代码运行两次(即未终止的http重定向,或者您的类被实例化两次)。
从实例化类的点(或点)追溯并查找可能的重复。或者,设置一个单元测试/脚本,除了测试所需的最小数据量之外,它只会实例化一次类。