1

解析用にファイル (バイナリ ファイル) を開こうとしていますが、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

2 番目の 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
4

1 に答える 1

5

ed リソースを意味var_exportのあるものにすることはできませんが、次のことはできます。fopenvar_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

于 2013-03-31T16:35:58.577 に答える