簡體   English   中英

PHP fopen()始終返回NULL

[英]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獲取NULLvar_export意味着fopen實際上是成功的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM