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

puk*_*puk 9 php error-handling file suphp

当我无法打开文件时,如何获得比'FALSE'更有意义的内容.

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

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

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

dee*_*ayy 8

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

$f = @fopen("x", "r") or die(print_r(error_get_last(),true));
Run Code Online (Sandbox Code Playgroud)


mpa*_*tel 6

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

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