图像URL错误捕获问题

时间:2009-02-06 14:41:18

标签: php http

我正在尝试查看是否存在URL,如果不存在,请将包含URL的变量重置为错误页面/图像。但是,我在下面尝试将PIC_URL的每个实例设置为noimage.gif,无论它是否存在且是否可访问。我错过了什么?

if (@fopen($_REQUEST[$PIC_URL],"r")) 
{
$status = "1";
} 
else  if (!(@fopen($_REQUEST[$PIC_URL],"r"))
{

$status = "2"; 
}

if ( $status == "2" ) $PIC_URL = "http://www.tricityhomes.com/assets/images/noimage.gif";

3 个答案:

答案 0 :(得分:1)

您可能想尝试做与此相似的事情

<?php
function url_exists($url) {
    // Version 4.x supported
    $handle   = curl_init($url);
    if (false === $handle)
    {
        return false;
    }
    curl_setopt($handle, CURLOPT_HEADER, false);
    curl_setopt($handle, CURLOPT_FAILONERROR, true);  // this works
    curl_setopt($handle, CURLOPT_HTTPHEADER, Array("User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.15) Gecko/20080623 Firefox/2.0.0.15") ); // request as if Firefox   
    curl_setopt($handle, CURLOPT_NOBODY, true);
    curl_setopt($handle, CURLOPT_RETURNTRANSFER, false);
    $connectable = curl_exec($handle);
    curl_close($handle);  
    return $connectable;
}
?>

来源:http://uk.php.net/manual/en/function.file-exists.php#85246

原因在于,正如已经提到的那样,检查fopen的原始值并不是最好的主意,而且该方法也没有考虑重定向到错误页面等。

答案 1 :(得分:0)

使用file_exists或is_readable,不要使用原始值

答案 2 :(得分:0)

对else部分的测试看起来多余,你的意思是$_REQUEST['PIC_URL']

if (@fopen($_REQUEST['PIC_URL'],"r")) 
{
    $status = "1";
} 
else
{

    $status = "2"; 
}

但它有很多错误。要测试是否存在远程文件,最好使用file_exists,甚至滚动自己的方法来执行HEAD请求。