php文件存在总是没有返回 - CodeIgniter

时间:2013-04-02 16:48:08

标签: codeigniter file-exists

我想要显示图像。用户最多可以添加7张图片,但如果需要,他们还可以添加少于7张图片。

我四处搜索,看到file_exists()是我追求的功能,但我尝试了几种方式,它总是没有给我任何图像。

这是我试过的一种方式:

<?php if(file_exists(base_url() . "photos/" . $p['p_id'] . "_5.jpg")):?>
    <div class="single">
       <a href="<?php echo base_url();?>photos/<?php echo $p['p_id'];?>_5.jpg" rel="lightbox[image]">
         <img src="<?php echo base_url();?>photos/<?php echo $p['p_id'];?>_5.jpg" style="width:100px; height:100px;"/>
       </a>
    </div>
<?php endif; ?>

然后我四处搜索,发现定义函数内部的路径不是一个好主意,所以我在外面定义它:

<?php $path = base_url() . "photos/" . $p['p_id'] . "_";?>
     <?php $img4 = $path . "4.jpg";?>
      <?php if(file_exists($img4)):?>

也没用。我正在测试4张图片在'照片'文件夹中,所以我知道应该有4张图片正在显示。关于如何修复它的任何想法都会很棒。感谢

2 个答案:

答案 0 :(得分:4)

函数file_exists接受文件路径作为参数,而不是像你现在使用的那样的url,即CodeIgniter的base_url()

您应该使用指向codeigniter应用程序基本目录的FCPATH常量。 这是您应该分配给您的路径(取决于您的图像文件在应用程序目录中的位置):

<?php $path = FCPATH . "htdocs/images/" . $product[0]['product_id'] . "_";?> 

但出于某种原因,如果真的需要使用base_url()。您可以使用get_headers()检查关联数组中url返回的标头,失败时检查false。从返回的标头中,您可以确定图像URL是否有效。 More about get_headers()

希望它有所帮助。

干杯,

阿迪

答案 1 :(得分:1)

文件存在需要目录路径而不是URL,URL将始终返回false。

    <?php 
    for($i=1; $i < 7; $i++):
    {
    $img = $path . $i . ".jpg";
    $url=getimagesize($img);
    if(!is_array($url))
    {
    ?>
    <div class="single">
            <a href="<?php echo base_url();?>images/<?php echo $product[0]['product_id'];?>_<?php echo $i; ?>.jpg" rel="lightbox[productimage]">
                  <img src="<?php echo base_url();?>images/<?php echo $product[0]['product_id'];?>_<?php echo $i; ?>.jpg" style="width:100px; height:100px;"/>
                </a>
            </div>
    <?php
    }
    }
    ?>

预先警告这是缓慢的一面,但它确实可以与服务器上的URL一起使用。