dskyx46424 2015-07-17 14:16
浏览 29
已采纳

当它被命名为'original.jpg'时,PHP无法在DIR中找到第一个文件

I have a simple function that returns a valid image path to display. It is passed the URL that's stored for a particular row in my DB. The basic functionality is:

  • If the URL has a trailing slash it's a directory; return the first file in that directory. If there aren't any, return the "default image"
  • If the URL is an image, see that it exists, otherwise use the first rule.

It works perfectly, except if the folder only contains a file named 'original.jpg', it displays the default image. If I add another file, it can use 'original.jpg'. If I rename it to 'original.jpeg' or 'ori.jpg' (or shorter) it works. This is the only filename I've encountered that behaves this way.

function displayFile($file){
    $imgPath = "./img/path/";

    // If folder was specified or file doesn't exists; use first available file
    if( substr($file, -1) == '/' || !file_exists($imgPath . $file) ){
        // Extract base path
        $file = strstr( $file, '/', true );
        $handle = opendir($imgPath . $file);
        $entry = readdir($handle);
        $firstFile = '';
        while (false !== ($entry = readdir($handle))) {
            if( substr($entry, 0, 1) != '.' ){
                $firstFile = $entry;
                break; // This break isn't the problem
            }
        }
        // No file found; use default
        if( $firstFile == '' ){ return $imgPath . "paw.png"; }
        // Found a file to use
        else{ return $imgPath . $file . '/' . $firstFile; }
    } else {
        // File name is valid; use it
        return $imgPath . $file;
    }
    closedir($imgPath);
}
  • 写回答

3条回答 默认 最新

  • duannaiying9662 2015-07-17 15:24
    关注

    You're calling readdir twice, essentially always skipping the first entry.

    $entry = readdir($handle);
    

    Remove that line and you should be good to go.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 phython如何实现以下功能?查找同一用户名的消费金额合并—
  • ¥15 孟德尔随机化怎样画共定位分析图
  • ¥18 模拟电路问题解答有偿速度
  • ¥15 CST仿真别人的模型结果仿真结果S参数完全不对
  • ¥15 误删注册表文件致win10无法开启
  • ¥15 请问在阿里云服务器中怎么利用数据库制作网站
  • ¥60 ESP32怎么烧录自启动程序
  • ¥50 html2canvas超出滚动条不显示
  • ¥15 java业务性能问题求解(sql,业务设计相关)
  • ¥15 52810 尾椎c三个a 写蓝牙地址