如何:如果图像存在于服务器返回图像,否则返回我自己的图像


How to: if image exists on server return image else return my own image?

我不知道如何做到这一点,我挣扎了整整一个上午,不知怎么的,但我不能。

我从蒸汽中提取一些数据从他们的蒸汽api服务json文件,但问题是我不知道他们是否故意这样做,或者只是假设人们不会使用他们的api,所以他们发布了一个链接到json文件中的图像,但服务器上的实际图像不存在,即使我访问他们的网站,我从json文件中提取的包图像甚至不存在在他们的网站上。

所以我想知道我如何重写这个?

当我拉json文件数组返回这个(它只是一部分的图像是,实际的json文件是非常大的复制到这里)

            [name] => Enclave
                [page_image] => http://cdn.akamai.steamstatic.com/steam/subs/31131/header.jpg?t=1380891628
                [apps] => Array
                    (
                        [0] => Array
                            (
                                [id] => 253980
                                [name] => Enclave
                            )
                    )

如果你访问一个游戏图片不存在的网站,如果你点击image link

http://cdn.akamai.steamstatic.com/steam/subs/31131/header.jpg?t=1380891628

返回404错误文件不存在

那么在图像不存在的情况下我如何重写这个并显示我自己的图像呢?

I tried with

if(!empty($image))
if(property_exists($image))
if($image !== false)
and of course $image path to json data [page_image]

none of combination works

然而,当图像存在时,它会正确地显示图像,所以$image设置正确。

getimagesize是一种检查资源是否实际上是图像的方法。getimagesize返回一个数组,如果链接指向有效的图像资源,则返回。您还可以在远程文件上使用getimagesize:

$image = 'http://cdn.akamai.steamstatic.com/steam/subs/31131/header.jpg?t=1380891628';
if (is_array(@getimagesize($image))) {
   //image exists
} else {
   //image does not exists
}

在调用之前,改变运行时错误报告的级别,而不是通过@来抑制getimagesize警告:

error_reporting(E_ALL & ~E_WARNING);

你可以来回切换,这样E_WARNING仍然会在你的应用程序的其余部分回显。

如果你真的想在PHP中这样做,那么你可以:

$fh = @fopen($image, 'r');
$imageexists = $fh!=false;
if ($fh) fclose($fh);