PHP:fopen 错误处理

2022-08-30 13:57:33

我用

$fp = fopen('uploads/Team/img/'.$team_id.'.png', "rb");
$str = stream_get_contents($fp);
fclose($fp);

然后该方法将其作为图像返回。但是当 fopen() 失败时,因为该文件不存在,它会引发错误:

[{"message":"Warning: fopen(uploads\/Team\/img\/1.png): failed to open stream: No such file or directory in C:\...

显然,这是以json的形式回归的。

现在的问题是:如何捕获错误并防止该方法将此错误直接抛给客户端?


答案 1

您应该首先通过file_exists()来测试文件是否存在。

try
{
  $fileName = 'uploads/Team/img/'.$team_id.'.png';

  if ( !file_exists($fileName) ) {
    throw new Exception('File not found.');
  }

  $fp = fopen($fileName, "rb");
  if ( !$fp ) {
    throw new Exception('File open failed.');
  }  
  $str = stream_get_contents($fp);
  fclose($fp);

  // send success JSON

} catch ( Exception $e ) {
  // send error message if you can
} 

或无异常的简单解决方案:

$fileName = 'uploads/Team/img/'.$team_id.'.png';
if ( file_exists($fileName) && ($fp = fopen($fileName, "rb"))!==false ) {

  $str = stream_get_contents($fp);
  fclose($fp);

  // send success JSON    
}
else
{
  // send error message if you can  
}

答案 2

您可以在调用 fopen() 之前使用 file_exists() 函数。

if(file_exists('uploads/Team/img/'.$team_id.'.png')
{
    $fp = fopen('uploads/Team/img/'.$team_id.'.png', "rb");
    $str = stream_get_contents($fp);
    fclose($fp);
}

推荐