File_exists 功能不起作用

Posted

技术标签:

【中文标题】File_exists 功能不起作用【英文标题】:File_exists function is not working 【发布时间】:2015-11-09 06:11:06 【问题描述】:

由于问题出在 file_exists() 上,并且该函数似乎应该转到根目录,因此当您确定 file_exists 函数上的文件位置时,您使用基本 url 声明它,因为它只测试文件来自服务器而不是来自 url 的位置:

错误代码

    $dir = base_url()."assets/produits/";

    foreach ($rows as $row) 
        $nom = $row->nShape;
        $type = array(".jpeg", ".jpg");

        foreach ($type as $ext) 
            echo "<br>I'm in the foreach loop <br>";
            $file_name = $dir . $nom . $ext;

            if (file_exists($file_name)) 
               echo "I'm in the file_exists function<br>";
               $img_src = $file_name;
             else 
                echo "I'm in the else statement <br>";
                echo $file_name."\n";
                $img_src = $dir . "none.png";
            
        
    

问题是全名在那里,但它总是认为它不存在,我做了一些回声来检查代码是否到达,这是一个屏幕截图:

知道http://localhost/dedax_new/assets/produits/2052.jpeg存在于服务器中。

解决办法:

// set the default to the no find image
$img_src = base_url() . "assets/produits/none.png";

foreach ($rows as $row) 
    $nom = $row->nShape;
    $type = array(".jpeg", ".jpg");

    foreach ($type as $ext) 
        $file_name =  $nom . $ext;

        if (file_exists("./assets/produits/".$file_name)) 
           $img_src = base_url() . 'assets/produits/'.$file_name;;
           // we found a file that exists 'get out of dodge'
           break;
        
    

提前感谢所有贡献者。

【问题讨论】:

看起来您正在查找扩展名为 .jpeg 的文件,但没有找到扩展名为 .jpg 的文件。问题是您正在退出 foreach 并将您的路径设置为最后一个测试。 @BigScar 我该如何解决这个问题,因为我需要给所有的扩展发短信 如果你想测试所有的扩展,也许最好将结果存储在不同的变量或数组中,否则你只会得到现在的最后一个结果。 php's file_exists() will not work for me?的可能重复 【参考方案1】:

file_exists 在文件系统上工作,而不是在网络上。您使用的是网址而不是文件位置。

此外,在您当前的循环中,第一次循环使用第一个 ext 可以找到文件,然后无法找到具有第二个 ext 的文件并假设没有找到文件。

所以试试这个

$dir = "dedax_new/assets/produits/";

// set the default to the no find image
$img_src = $dir . "none.png";

foreach ($rows as $row) 
    $nom = $row->nShape;
    $type = array(".jpeg", ".jpg");

    foreach ($type as $ext) 
        echo "<br>I'm in the foreach loop <br>";
        $file_name = $dir . $nom . $ext;

        if (file_exists($file_name)) 
           echo "I'm in the file_exists function looking for $filename";
           $img_src = $file_name;
           // we found a file that exists 'get out of dodge'
           break;
        
    

另外一个常见的错误是不尊重文件系统的大小写敏感性。确保您尊重文件位置的大小写敏感,因为 URL 通常与文件系统的配置不​​匹配。

【讨论】:

但是目录不正确,它正在测试:localhost/dedax_new/index.php/produits/index/assets/produits 我需要测试:localhost/dedax_new/assets/produits/2052.jpeg 您是否对其进行了测试并将数据回显出来? 查看细微变化,使其与它正在寻找的实际 $filename 相呼应 这是我得到的:i.imgur.com/ViT07U5.png 它以localhost/dedax_new/index.php/produits/index 作为基本路径 查看变化,去$dir试试吧【参考方案2】:

问题出在 directory file_exists 函数测试文件位置,它无法测试 url 这里是代码:

// set the default to the no find image
$img_src = base_url() . "assets/produits/none.png";

foreach ($rows as $row) 
    $nom = $row->nShape;
    $type = array(".jpeg", ".jpg");

    foreach ($type as $ext) 
        $file_name =  $nom . $ext;

        if (file_exists("./assets/produits/".$file_name)) 
           $img_src = base_url() . 'assets/produits/'.$file_name;;
           // we found a file that exists 'get out of dodge'
           break;
        
    

【讨论】:

以上是关于File_exists 功能不起作用的主要内容,如果未能解决你的问题,请参考以下文章

函数 file_exists 不起作用

使用 .htaccess 重写规则时 PHP 函数 file_exists 不起作用

file_exists() 在 while 循环内的 php5 中不起作用

PHP file_exists 不起作用。似乎在颠倒真假

file_exists() 不起作用,但是当在浏览器中给出图像的 url 时,会显示图像

PHP file_exists 在文档根目录之外不起作用