Я делаю файл с
$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.
Вопрос теперь: Как я могу уловить ошибку и не дать методу выбросить эту ошибку непосредственно клиенту?
Сначала вы должны проверить существование файла 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:\...
ошибка ясна: вы поместили неправильный каталог, вы можете попробовать, что хотите, но это не сработает. вы можете заставить его работать с этим:
('./$team_id.'png',"rb");
не забывайте: вы не можете получить доступ к файлу, который находится в вашей папке «www» (он не нашел ваш файл, потому что он дает вам свое имя: имя принадлежит переменной $ team_id)