如何检查文件是否可读 - 产生莫名其妙的错误?

时间:2014-08-11 15:42:10

标签: php

我已编写以下代码段来检查是否可以打开图像文件:

    $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.jpgfopen()访问该文件时,浏览器应该产生404/403错误,而不是任意重定向到类似的现有product_id,即1997。

任何建议都会很棒。

更新

我找到了images文件夹的完整服务器文件路径,现在is_readable正在评估为true。但是,当我在image src标记内使用相同的路径时,会显示损坏的图像。

知道为什么会这样吗?

2 个答案:

答案 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。