当fopen()失败时获取有意义的信息(PHP/suPHP)


Get meaningful information when fopen() fails (PHP/suPHP)

当我无法打开文件时,我如何得到比'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文件在我的hole文件夹的子文件夹之一。此外,我正在使用suPHP与我试图写入具有0755权限的文件夹(suPHP要求所有文件夹都具有此权限)。

我如何找出为什么有问题,或者至少在试图打开文件之前查询它

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

$f = @fopen("x", "r") or die(print_r(error_get_last(),true));

fopen应该在失败时引发E_WARNING。请参阅error_get_last或set_error_handler(*)来捕获它。除此之外,您还可以使用file_exists和is_readable来检查文件是否丢失或存在其他(可能与权限相关)问题。

(*)我认为最好总是设置一个错误处理程序,将所有PHP错误转换为异常。