我正在尝试打开一个文件进行解析(二进制文件),但无论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
其中'username'与web服务器进程的用户名和PHP(lighttpd和php-fpm)正在运行的用户名相匹配。父目录还具有user / group / all的读/读/读权限。
我已经尝试了其他文件,我注意到我在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
OS:
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
答案 0 :(得分:5)
您无法var_export
fopen
资源,但您可以var_dump
:
$ php -r 'var_export(fopen("/tmp/a","w+"));'
NULL
$ php -r 'var_dump(fopen("/tmp/a","w+"));'
resource(5) of type (stream)
...因为var_export()
旨在“恢复”PHP脚本中的变量,并且资源需要更多设置,然后才能实例化一个简单变量。如果您想知道fopen
是否成功,请检查它不是false
。
$ php -r 'var_export(fopen("/this/does/not/exist","w+"));'
... some errors...
false
换句话说,您从NULL
获得var_export
这一事实意味着fopen
实际上已成功。