我正在尝试打开一个文件进行解析(二进制文件),但是无论 fopen() 总是返回 NULL。
我已经排除了几乎所有事情,以至于我有一个简单的测试脚本:
<?php
$idx = fopen('/usr/home/username/web/appname/dev/www/debug/18194001.idx','r');
trigger_error(var_export($idx,true));
exit();
trigger_error(var_export()) 的输出;是:
[31-Mar-2013 16:30:34 UTC] PHP Notice: NULL in /usr/home/username/web/appname/dev/www/debug/ajax.idx.php on line 3
无论我为第二个 fopen() 选项指定什么标志,我都会得到相同的结果。
现在,显而易见的问题是该文件是否存在,我是否有权读取它?这两个问题的答案都是肯定的。我使用了相对路径和绝对路径,都正确读取了文件。file_get_contents() 也可以毫无问题地读取文件。
is_readable() 和 file_exists() 都返回 true
该文件的 ls -lah 输出为:
-rwxrwxrwx 1 username username 2.0K Mar 30 15:02 18194001.idx
其中“用户名”与运行 Web 服务器进程和 PHP(lighttpd 和 php-fpm)的用户名匹配。父目录还具有用户/组/所有的读/读/读权限。
我已经尝试过其他文件,并且我注意到我在 fopen 中抛出的几乎所有东西都返回了一个 NULL 值。
帮助?
PHP信息:
PHP 5.4.6 (cli) (built: Oct 10 2012 10:43:19)
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2012 Zend Technologies
with XCache v2.0.1, Copyright (c) 2005-2012, by mOo
Lighttpd 信息:
lighttpd/1.4.31 (ssl) - a light and fast webserver
Build-Date: Sep 7 2012 15:38:20
操作系统:
FreeBSD hostname.hostname.hostname 8.2-RELEASE FreeBSD 8.2-RELEASE #0: Thu Feb 17 02:41:51 UTC 2011 root@mason.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC amd64