Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当fopen()失败时获取有意义的信息(PHP/suPHP)_Php_File_Error Handling_Suphp - Fatal编程技术网

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

当fopen()失败时获取有意义的信息(PHP/suPHP),php,file,error-handling,suphp,Php,File,Error Handling,Suphp,当我无法打开文件时,如何获得比“FALSE”更有意义的内容 $myFile = "/home/user/testFile.txt"; $fh = fopen($myFile, 'w') or die("can't open file"); 当我使用die语句时,无法打开文件返回给客户端,它几乎是无用的。如果我删除它,则不会引发错误。如果我返回$fh则为FALSE。我尝试了本地文件名和绝对文件名。我的index.html文件位于“我的洞”文件夹的一个子文件夹中。此外,我正在将SUPPP用于我试

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

$myFile = "/home/user/testFile.txt"; 
$fh = fopen($myFile, 'w') or die("can't open file");
当我使用
die
语句时,
无法打开文件
返回给客户端,它几乎是无用的。如果我删除它,则不会引发错误。如果我返回
$fh
则为
FALSE
。我尝试了本地文件名和绝对文件名。我的
index.html
文件位于“我的洞”文件夹的一个子文件夹中。此外,我正在将SUPPP用于我试图写入的文件夹,该文件夹具有
0755
(SUPPP要求所有文件夹都具有此权限)

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

使用error\u get\u last()捕获php中的(抑制的)错误:

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

fopen
如果失败,应发出E_警告。查看或(*)以捕获它。除此之外,您还可以使用和检查文件是否丢失或是否存在其他(可能与权限相关)问题


(*)我认为,总是设置一个错误处理程序,将所有PHP错误变成异常。这是一个好的实践。

打开错误报告?我完全忘记了。在我的页面顶部,我将其设置为
错误报告(E|u ALL | E|u STRICT)足够了吗?IIRC足够了,除非在php.ini中关闭了显示错误。是否有合适的方法将异常传播回客户端?现在我只是打印/回显这些内容。@puk:这取决于您如何设计应用程序。它可能正好适合返回消息,一些人希望显示javascript弹出窗口,另一些人希望显示错误页面等等。我认为最重要的一点是,首先,您有一条对用户有用的错误消息,还有一条对开发人员有技术见解的错误消息,例如,在应用程序错误日志中。此错误是否会显示在客户端、服务器端,还是取决于“如何设计应用程序”?您可以选择显示错误的位置和方式。通常,人们会向用户显示一个通用的“出了问题”(开发模式除外),并记录和/或通过电子邮件发送实际错误。但不要过早地将事情过度复杂化:)这里的“@”的目的是什么,我以前从未见过它。@puk@symbol是错误控制操作符。它将抑制该函数发出的任何错误。最后,这意味着如果函数失败,您将不会在屏幕或日志中看到任何与之相关的错误。这是一种糟糕的做法,应该避免。您始终可以设置自定义错误处理程序来捕获错误。