#php #php-gd
#php #php-gd
Вопрос:
Я пытаюсь определить, является ли изображение изображением при задании URL. Чтобы сохранить изображение с URL-адреса, я использовал следующее:
// create the image and save it
$imagefile = $URL;
$resource = imagecreatefromstring(file_get_contents($imagefile));
// X amount of quality is the last number
imagejpeg($resource, "images/covers/$imagepath.jpeg", 50);
imagedestroy($resource);
$URL — это просто ссылка на изображение, предоставленная пользователем.
Я попробовал следующее:
$imagefile = $addBuildCover;
$resource = imagecreatefromstring(file_get_contents($imagefile));
if ($resource !== false) {
$return['imageGood'] = true;
} else {
$return['imageBad'] = true;
}
Я пробовал этот код, и я возвращаю правильный JSON-возврат ‘imageBad’, но он выдает мне ошибку, перед которой:
Warning: file_get_contents(ewffw.png): failed to open stream: No such file or directory in /var/www/clients/client2/web3/web/process/addnewbuild.php on line 116
Warning: imagecreatefromstring(): Empty string or invalid image in /var/www/clients/client2/web3/web/process/addnewbuild.php on line 116
Как мне попытаться перехватить сбой URL, но на самом деле не возвращать ошибку, как указано выше?
Ответ №1:
imagecreatefromstring
к сожалению, будет предупреждать, если вы передадите ему неверные данные, поэтому его использование излишне проблематично.
Вам придется закрыть его с помощью оператора подавления ошибок @
:
$resource = @imagecreatefromstring(file_get_contents($imagefile));
Использование этого оператора обычно вызывает неодобрение, но в данном случае у вас действительно есть законный вариант использования.
Этот подход также позаботится о предупреждении, выдаваемом из file_get_contents
, если файл не может быть загружен. Эта функция работает не так плохо (есть способы с достаточной степенью уверенности проверить, выйдет ли она из строя или нет, например is_readable
), поэтому вы можете проверять с помощью кода вместо использования @
, но поскольку вам все равно нужно подавлять ошибки, и для вас не имеет значения, не удалось прочитать файл или нет, просто хлопнувимхо, @
здесь полностью оправдано.
Комментарии:
1. Спасибо! ошибка вызывала проблемы с возвратом JSON, поэтому я думаю, что использование @ оправдано.
Ответ №2:
<?php
$serverName = "server";
$uid = "user";
$pwd = "pass";
$connectionInfo = array( "UID"=>$uid,
"PWD"=>$pwd,
"Database"=>"database");
$conn = sqlsrv_connect( $serverName, $connectionInfo);
if( $conn === false )
{
echo "Unable to connect.</br>";
die( print_r( sqlsrv_errors(), true));
}
$fotoquery = "SELECT column_image FROM Table WHERE Column = 'xxxxxxxxxx'";
$stmt = sqlsrv_query( $conn, $fotoquery);
if( $stmt === false )
{
echo "Error in executing query.</br>";
die( print_r( sqlsrv_errors(), true));
}
$dataImage = sqlsrv_fetch_array($stmt);
$varimg = base64_encode($dataImage[0]);
$data = base64_decode($varimg);
$im = imagecreatefromstring($data);
if ($im !== false) {
header('Content-Type: image/png');
imagepng($im);
imagedestroy($im);
}
else {
echo 'An error occurred.';
}
?>