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

时间:2011-11-05 06:56:52

标签: php file error-handling 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文件位于我的孔文件夹的一个子文件夹中。此外,我正在使用suPHP和我试图写入的文件夹获得0755的权限(suPHP要求所有文件夹都这样)。

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

2 个答案:

答案 0 :(得分:8)

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

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

答案 1 :(得分:6)

如果失败,

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

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