【问题标题】:php "is_dir" file listings for Intranet siteIntranet 站点的 php "is_dir" 文件列表
【发布时间】:2014-03-24 21:44:54
【问题描述】:

我正在创建一个测试文件以获取位于 Intranet 文件夹中的所有文件,并简单地将图标图像放在根据其扩展名列出的文件旁边。 出于某种原因,代码无法正确提取内容。

这是目录中文件的 Windows 资源管理器视图的屏幕截图。

这是我的代码:

<?php

  $dir="file:///.....to_my_directory"; // Directory where files are stored

  if ($dir_list = opendir($dir)) {
     while(($filename = readdir($dir_list)) != false) {

        if (is_dir($filename)) {
      $img = 'folder_img.jpg';
    } else {

      $filestuff = pathinfo($filename);
      $file_ext = isset($filestuff['extension']) ? $filestuff['extension'] : null;
      switch($file_ext) {
        case 'pdf':
        $img = 'pdf_img.jpg';
        break;

        case 'doc' || 'docx' || 'docm' || 'dotm' || 'dotx':
        $img = 'word_img.jpg';
        break;

        case 'xls' || 'xlsm' || 'xltx' || 'xlam' || 'xlsx' || 'xlm' || 'xlt' || 'xlsb':
        $img = 'excel_img.jpg';
        break;

        case 'txt':
        $img = 'txt_file_img.jpg';
        break;

        case NULL:
        $img = 'blank_file_img.jpg';
        break;
      }
   }



?>
<p><span><img src='<?php echo $img; ?>' height='23px;'/><a href="<?php echo $filename; ?>"><?php echo $filename;?></a></span></p>


<?php
  }
    closedir($dir_list);
  }

?>

这就是我运行它时的样子:

问题是某些未列出的扩展正在拉动“Microsoft WORD”图标。

扩展名为“.mdb”的“Access Database”文件正在拉取一个 Word 图标,扩展名“.mdb_hcu”也在拉取一个 WORD 图标。

如何将其设为 BLANK 文件选项(请参阅答案为 NULL 的开关案例)

另外,我如何组织以便首先列出文件夹并且所有内容都按字母顺序排列?

是否有插件可以让我更轻松地实现这一目标?

【问题讨论】:

    标签: php directory intranet


    【解决方案1】:

    问题是您不能像这样列出大小写值:

    case 'doc' || 'docx' || 'docm' || 'dotm' || 'dotx':
    

    这将被评估为一个将评估为 true 的语句。然后扩展名将与该结果进行比较,除非扩展名是NULL,否则情况将为真。

    您需要像这样列出每个案例选项:

    case 'doc':    //if
    case 'docx':   //any
    case 'docm':   //of
    case 'dotm':   //these
    case 'dotx':   //are true
                   //this will run
        //set image
        break;     //up to this
    

    如果其中任何一个 case 为真(等于扩展名),则 case 内的代码将一直运行,直到break 被命中。

    【讨论】:

    • 那么我如何在一种情况下表示多个选项?
    • @bagofmilk:我正在打出一个例子。起来了。
    • 太棒了。现在问题发生在它没有拉文件夹旁边的“folder_img”图标的地方 - 它使用默认选项。我是否正确设置了“if-else”语句?
    • 据我所知,其他一切看起来都很好。另一种选择是删除case NULL:(或default:,无论您使用哪个)并在switch 语句之前设置$img = 'blank_file_img.jpg';。然后交换机将使用扩展图像覆盖图像。如果您仍然遇到问题,请编辑您的问题并将更新后的代码与问题一起发布。
    【解决方案2】:

    你能把case NULL:改成default:看看能不能用吗?

    default: 表示如果它不匹配任何“案例”,那么它将运行默认的。

    谢谢

    :编辑答案:

    您需要更改设置 $img = 'folder_img.jpg' 的位置,因为它将其设置为 word,然后在下一个“while”中,它不是目录,因此不会更改,但也不匹配任何大小写,所以保留就像上次 while 一样 - 希望这是有道理的!

    让我知道它是否适合你!

    <?php
    
        $dir="."; // Directory where files are stored
    
        if ($dir_list = opendir($dir)) {
            while(($filename = readdir($dir_list)) != false) {
                $img = 'folder_img.jpg';
                if (!is_dir($filename)) {
                    $filestuff = pathinfo($filename);
                    $file_ext = isset($filestuff['extension']) ? $filestuff['extension'] : null;
                    switch($file_ext) {
                        case 'pdf':
                            $img = 'pdf_img.jpg';
                        break;
    
                        case 'doc':
                        case 'docx':
                        case 'docm':
                        case 'dotm':
                        case  'dotx':
                            $img = 'word_img.jpg';
                        break;
    
                        case 'xls':
                        case 'xlsm':
                        case 'xltx':
                        case 'xlam':
                        case 'xlsx':
                        case 'xlm':
                        case 'xlt':
                        case 'xlsb':
                            $img = 'excel_img.jpg';
                        break;
    
                        case 'txt':
                            $img = 'txt_file_img.jpg';
                        break;
    
                        default:
                            $img = 'blank_file_img.jpg';
                        break;
                    }
                }
    ?>
    <p><span><img src='<?php echo $img; ?>' height='23px;'/><a href="<?php echo $filename; ?>"><?php echo $filename;?></a></span></p>
    
    
    <?php
            }
        closedir($dir_list);
        }
    ?>
    

    【讨论】:

    • 这是一个很好的尝试。但是它并没有在我的文件夹旁边放置“文件夹”图标 - 它而是使用默认选项。
    • 啊,是的,抱歉 - 看起来 Jonathan 已经正确了 - 错误似乎是 switch 不支持 ||
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-31
    • 1970-01-01
    • 1970-01-01
    • 2013-02-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多