[英]PHP fopen() returns NULL, always
我試圖打開一個文件進行分析(一個二進制文件),但是無論什么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_visible()和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
您不能有意義地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
換句話說,您從var_export
獲取NULL
的var_export
意味着fopen
實際上是成功的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.