【问题标题】:php file exists returns nothing always - CodeIgniterphp 文件存在总是不返回任何内容 - CodeIgniter
【发布时间】:2013-03-24 01:52:34
【问题描述】:

我想要显示图像。用户最多可以添加 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 张图像。关于我应该如何解决它的任何想法都会很棒。谢谢

【问题讨论】:

    标签: codeigniter file-exists


    【解决方案1】:

    函数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().

    希望对你有帮助。

    干杯,

    阿迪

    【讨论】:

    • BASEPATH 是不正确的常量,它指向系统文件夹路径。对于静态资源,FCPATH 更合适,也就是index.php所在的dir的路径(FC代表front controller)。
    • @Cryode:感谢您发现这一点!
    【解决方案2】:

    文件存在需要目录路径而不是 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。

    【讨论】:

    • 嗨 Rick Calder,我不明白你为什么要使用 getimagesize()?
    • 因为正如我所说的 file_exists 不适用于 URL,它需要一个实际的目录路径,即 C:/my 文档。 getimagesize 将在 url 上工作,那么如果对它的响应是一个数组,你就知道图像确实存在
    • 啊,我知道了,现在就试试吧
    • 我试过了,它可以工作,但如果你不介意我将使用 Ardy 的修复,因为该方法是我想出的,只需要修改。感谢您的帮助,非常感谢,因为我学到了一种新的方法
    猜你喜欢
    • 1970-01-01
    • 2014-06-24
    • 2020-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多