我正在尝试在给定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;
}
我已尝试过该代码,并且我返回了'imageBad'的正确JSON返回值,但它之前给出了一个错误:
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失败但实际上没有像上面那样返回错误?
答案 0 :(得分:4)
imagecreatefromstring
将会发出警告,因此使用它会造成不必要的问题。
您必须使用错误抑制运算符@
关闭它:
$resource = @imagecreatefromstring(file_get_contents($imagefile));
使用此运算符通常是不受欢迎的,但这种情况是您确实拥有合法用例的情况。
如果无法加载文件,此方法还将处理file_get_contents
发出的警告。该功能并没有表现得那么糟糕(有方法可以合理确定它是否会失败,例如is_readable
)所以你可以用代码检查而不是使用@
,但是因为你需要无论如何都要抑制错误,如果文件读取失败,对你没有任何影响,只需在前面拍一个@
,恕我直言就可以了。
答案 1 :(得分:-4)
<?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.';
}
?>