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

时间:2014-07-01 10:53:48

标签: php json image

我无法找到如何实现这一点,我整个上午都在努力以某种方式得到它,但我不能。

我从他们在json文件中的steam api服务中提取了一些数据,但问题是我不知道他们是故意这样做还是只是假设人们不会使用他们的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
                            )

                    )

因此,如果您访问该网站,该游戏图片不存在,如果您按照图片链接

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

它返回404错误文件不存在。

因此,在图像不存在的情况下,我如何覆盖它并显示我自己的图像?

我试过

if(!empty($image))
if(property_exists($image))
if($image !== false)

and of course $image path to json data [page_image]

没有一个组合工作

但是当图像存在时,它会正确显示图像,因此$ image设置正确。

我知道如何覆盖这个?

2 个答案:

答案 0 :(得分:1)

getimagesize是一种检查资源是否真的是图像的方法。 getimagesize返回一个数组, if 该链接指向有效的图片资源。您也可以在远程文件上使用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

答案 1 :(得分:0)

如果您真的想从PHP中执行此操作,那么您可以:

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