我已编写以下代码段来检查是否可以打开图像文件:
$sql="SELECT * FROM product
WHERE brand_id = '".$id."'
ORDER BY active DESC,
product_id DESC";
$result=mysql_query($sql);
while($rows=mysql_fetch_array($result)){
$filePath = 'http://www.example.com/130/'.$rows['product_id'].'.jpg';
$handle = fopen($filePath,"r");
if($handle){ ?>
<img src="http://www.example.com/130/<?=$rows['product_id']?>.jpg"
alt="" width="130" height="130" border="0" onerror="this.src='http://www.example.com/220/no_image.jpg'"/>
<? } else { ?>
<img src="http://www.example.com/220/no_image.jpg" alt="" width="130" height="130" border="0" />
<? } } ?>
这似乎并没有产生正确的结果。
如果文件不存在且因此无法在指定的URL处打开,则会返回杂项图像。
例如,在使用product_id
= 12997进行测试时,浏览器会自动重定向到http://www.example.com/130/1997.jpg
。
因此,理论上代码正在运行,但是,当相关ID不存在时,如何阻止浏览器选择最接近的匹配product_id
。
尝试使用http://example.com/130/12997.jpg
在fopen()
访问该文件时,浏览器应该产生404/403错误,而不是任意重定向到类似的现有product_id
,即1997。
任何建议都会很棒。
更新
我找到了images文件夹的完整服务器文件路径,现在is_readable
正在评估为true。但是,当我在image src
标记内使用相同的路径时,会显示损坏的图像。
知道为什么会这样吗?
答案 0 :(得分:3)
is_readable
应该适合你。它检查文件是否存在且可读:
<?php if (is_readable($filePath)) { ?>
<img src="<?php echo $filePath; ?>" alt="" width="130" height="130" border="0" />
<?php } else { ?>
<img src="http://www.example.com/220/no_image.jpg" alt="" width="130" height="130" border="0" />
<?php } ?>
答案 1 :(得分:0)
PHP函数is_readable($filename)
(其中$ filename是要检查的文件)如果文件可读则返回TRUE,否则返回false。
例如:
<?php if (is_readable($filePath) == TRUE) { ?>
<img src="<?php echo $filePath; ?>" alt="" width="130" height="130" border="0" />
<?php } else { ?>
<img src="http://www.example.com/220/no_image.jpg" alt="" width="130" height="130" border="0" />
<?php } ?>
请注意,$ filename变量必须是服务器上的路径,而不是公共http路径,因此您将编辑$ filePath变量,使其指向服务器上的位置而不是公共URL。