Вы неправильно обрабатываете предупреждение . Вы не можете просто использовать !
в своем if / else
утверждении.
(я предполагаю, что вы используете laravel с методами, описанными выше.)
Вы придумали что-то вроде функции / метода для этого. Вы можете сделать это следующим образом:
private function checkImage($url)
{
$valid_types = ['image/png', 'image/jpeg']; // add more valid types that you want and so on
$client = new \GuzzleHttp\Client();
try {
$response = $client->head($url);
return
!empty($response->getHeaders()['Content-Type'][0]) &&
in_array($response->getHeaders()['Content-Type'][0], $valid_types, true);
} catch (\Exception $e) {
return false;
}
}
Тогда, наконец, просто используйте метод в своем классе:
$url = 'https://imgimob.sobressai.com.br/fotos/765/475140/12768824_g.jpg';
$exists = $this->checkImage($url);
echo $exists ? 'yay!' : 'does not exist'; // or do the echo inside the function whichever you prefer
Я использовал описанный выше метод ->head
, чтобы просто проверить и не включать body.
Редактировать:
В целях фактической загрузки файла. Просто используйте тот же код выше, вместе с вашим Storage
методом сохранения, чтобы сохранить изображение. Использование ->get()
:
$url = 'https://imgimob.sobressai.com.br/fotos/765/475139/12768822_g.jpg';
$valid_types = ['image/png', 'image/jpeg']; // add more valid types that you want and so on
$client = new \GuzzleHttp\Client();
try {
$response = $client->get($url);
if (
!empty($response->getHeaders()['content-type'][0]) &&
in_array($response->getHeaders()['content-type'][0], $valid_types, true)
) {
Storage::disk('public')->put('default/teste.jpg', $response->getBody()->getContents());
}
} catch (\Exception $e) {
echo 'does not exist';
}