如何产出的原因PHP文件,打开故障
-
05-07-2019 - |
题
我要调试一个巨大的、过时的(大约在2001)PHP网服务和我遇到的文件打开故障。Fopen call是在一个包含的模块,该呼叫者是日志记录,该文件可能不打开,但原因是没有被记录。
代码,实际上不会打开的是:
// Read the file
if (!($fp = @fopen($fileName, 'rb'))) {
$errStr = "Failed to open '{$fileName}' for read.";
break; // try-block
}
我怎么能找出为什么fopen失败?
解决方案
伟大的答复中已经给出的,有关 @operator, 但这里有一对夫妇的更多信息,可能是有用的,要么为您或其他人:
- 如果为调试目的,需要禁止的
@ operator
, 你可以安装的 尖叫的扩展 --还见 该手册 -- 这是真正有用的,当你在保持某种古老的应用程序没有设计良好的/编码^^ - 根据你的PHP配 (如果的
track_errors
选项活), 你可能可以使用$php_errormsg
得到的最后一个错误的信息。
考虑到这段代码:
// This file doesn't exist
if (!@fopen('/tmp/non-existant-file.txt', 'r')) {
var_dump($php_errormsg);
}
// My Apache server doesn't have the right to read this file
if (!@fopen('/tmp/vboxdrv-Module.symvers', 'w')) {
var_dump($php_errormsg);
}
你会得到这个:
string 'fopen(/tmp/non-existant-file.txt) [<a href='function.fopen'>function.fopen</a>]: failed to open stream: No such file or directory' (length=129)
string 'fopen(/tmp/vboxdrv-Module.symvers) [<a href='function.fopen'>function.fopen</a>]: failed to open stream: Permission denied' (length=122)
所以,真正的、有用的、有意义的、错误的消息 ;-)
其他提示
带走@符号。
@符号会抑制错误消息,因此它会抑制函数通常会给出的错误。
删除错误抑制器。
不隶属于 StackOverflow