10

当我无法打开文件时,如何获得比“FALSE”更有意义的东西。

$myFile = "/home/user/testFile.txt"; 
$fh = fopen($myFile, 'w') or die("can't open file");

当我使用die语句时,can't open file返回给客户端,几乎没用。如果我删除它,则不会引发错误。如果我返回$fh它是FALSE. 我尝试了本地文件名和绝对文件名。我index.html的文件位于我的孔文件夹的子文件夹之一中。此外,我正在将 suPHP 与我试图写入的文件夹一起使用0755(suPHP 要求所有文件夹都具有此权限)。

我如何找出问题的原因,或者至少在尝试打开文件之前查询它。

4

2 回答 2

11

使用 error_get_last() 来捕获 php 中的(被抑制的)错误:

$f = @fopen("x", "r") or die(print_r(error_get_last(),true));
于 2011-11-05T07:01:09.110 回答
7

fopen如果失败,应该引发 E_WARNING。请参阅error_get_lastset_error_handler (*) 来捕获它。除此之外,您可以使用file_existsis_readable来检查文件是否丢失或是否存在另一个(可能与权限相关的)问题。

(*) 我认为始终设置一个将所有 PHP 错误转换为异常的错误处理程序是一种很好的做法。

于 2011-11-05T07:04:18.037 回答