我正在尝试查看是否存在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";
答案 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请求。