imagecreatefromstring — сбой перехвата — PHP

#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.';
    }
?>