PHP: обработка ошибок fopen

Я делаю файл с

$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.

Вопрос теперь: Как я могу уловить ошибку и не дать методу выбросить эту ошибку непосредственно клиенту?

Solutions Collecting From Web of "PHP: обработка ошибок fopen"

Сначала вы должны проверить существование файла 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 } 

Вы можете использовать функцию file_exists () перед вызовом функции fopen () .

 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); } 
 [{"message":"Warning: fopen(uploads\/Team\/img\/1.png): failed to open stream: No such file or directory in C:\... 

ошибка ясна: вы поместили неправильный каталог, вы можете попробовать, что хотите, но это не сработает. вы можете заставить его работать с этим:

  1. возьмите файл и поместите его в ту же папку вашего php-файла (вы сможете переместить его после того, как не волнуйтесь, это ваша ошибка) или в папке «выше» вашего скрипта (только не за пределами вашего www)
  2. смените fopen на ('./$team_id.'png',"rb");
  3. перезапустите файл сценария

не забывайте: вы не можете получить доступ к файлу, который находится в вашей папке «www» (он не нашел ваш файл, потому что он дает вам свое имя: имя принадлежит переменной $ team_id)