Скрыть файлы PHP в каталоге папок

#php #file #indexing #directory

#php #файл #индексирование #каталог

Вопрос:

Я создаю страницу, на которую я могу загружать файлы и показывать их пользователю на аккуратной веб-странице. Я использую следующий код, чтобы получить желаемые результаты. Все работает отлично, однако я не хочу показывать index.php файл в списке. Как мне заставить его скрыть это?

 <!doctype html>
<html>

<head>
  <meta charset="UTF-8">
  <title>Chase Andrews Show - Promos</title>
  <link rel="stylesheet" href="/common/dir-style.css">
  <script src="/common/sorttable.js"></script>
</head>

<body>

  <div id="container">

    <h1>Chase Andrews Show - Promos</h1>

    <table class="sortable">
      <thead>
        <tr>
          <th>Filename</th>
          <th>Type</th>
          <th>Size <small>(bytes)</small></th>
          <th>Date Modified</th>
        </tr>
      </thead>
      <tbody>
      <?php
        // Opens directory
        $myDirectory=opendir(".");

        // Gets each entry
        while($entryName=readdir($myDirectory)) {
          $dirArray[]=$entryName;
        }

        // Finds extensions of files
        function findexts ($filename) {
          $filename=strtolower($filename);
          $exts=split("[/\.]", $filename);
          $n=count($exts)-1;
          $exts=$exts[$n];
          return $exts;
        }

        // Closes directory
        closedir($myDirectory);

        // Counts elements in array
        $indexCount=count($dirArray);

        // Sorts files
        sort($dirArray);

        // Loops through the array of files
        for($index=0; $index < $indexCount; $index  ) {

          // Allows ./?hidden to show hidden files
          if($_SERVER['QUERY_STRING']=="hidden")
          {$hide="";
          $ahref="./";
          $atext="Hide";}
          else
          {$hide=".";
          $ahref="./?hidden";
          $atext="Show";}
          if(substr("$dirArray[$index]", 0, 1) != $hide) {

          // Gets File Names
          $name=$dirArray[$index];
          $namehref=$dirArray[$index];

          // Gets Extensions 
          $extn=findexts($dirArray[$index]); 

          // Gets file size 
          $size=number_format(filesize($dirArray[$index]));

          // Gets Date Modified Data
          $modtime=date("M j Y g:i A", filemtime($dirArray[$index]));
          $timekey=date("YmdHis", filemtime($dirArray[$index]));

          // Prettifies File Types, add more to suit your needs.
          switch ($extn){
            case "png": $extn="PNG Image"; break;
            case "jpg": $extn="JPEG Image"; break;
            case "svg": $extn="SVG Image"; break;
            case "gif": $extn="GIF Image"; break;
            case "ico": $extn="Windows Icon"; break;

            case "txt": $extn="Text File"; break;
            case "log": $extn="Log File"; break;
            case "htm": $extn="HTML File"; break;
            case "php": $extn="PHP Script"; break;
            case "js": $extn="Javascript"; break;
            case "css": $extn="Stylesheet"; break;
            case "pdf": $extn="PDF Document"; break;

            case "zip": $extn="ZIP Archive"; break;
            case "bak": $extn="Backup File"; break;

            default: $extn=strtoupper($extn)." File"; break;
          }

          // Separates directories
          if(is_dir($dirArray[$index])) {
            $extn="amp;<Directoryamp;>"; 
            $size="amp;<Directoryamp;>"; 
            $class="dir";
          } else {
            $class="file";
          }

          // Cleans up . and .. directories 
          if($name=="."){$name=". (Current Directory)"; $extn="amp;<System Diramp;>";}
          if($name==".."){$name=".. (Parent Directory)"; $extn="amp;<System Diramp;>";}

          // Print 'em
          print("
          <tr class='$class'>
            <td><a href='./$namehref'>$name</a></td>
            <td><a href='./$namehref'>$extn</a></td>
            <td><a href='./$namehref'>$size</a></td>
            <td sorttable_customkey='$timekey'><a href='./$namehref'>$modtime</a></td>
          </tr>");
          }
        }
      ?>
      </tbody>
    </table>

    <h2><?php print("<a href='$ahref'>$atext hidden files</a>"); ?></h2>

  </div>

</body>

</html>
 

Ответ №1:

Просто не добавляйте его в свой массив. Изменить

     // Gets each entry
    while($entryName=readdir($myDirectory)) {
      $dirArray[]=$entryName;
    }
 

Для

     // Gets each entry
    while($entryName=readdir($myDirectory)) {
      if ('index.php' !== $entryName) {
        $dirArray[]=$entryName;
      }
    }
 

Также обратите внимание, что, как объясняется в документации, ваш цикл неверен. Из документации:

Пожалуйста, обратите внимание на способ проверки возвращаемого значения readdir() в приведенных ниже примерах. Мы явно проверяем, является ли возвращаемое значение идентичным (равным и того же типа, что и —см. Операторы сравнения для получения дополнительной информации) FALSE, поскольку в противном случае любая запись каталога, имя которой оценивается как FALSE, остановит цикл (например, каталог с именем «0»).

Итак, действительно, ваш цикл должен быть:

     // Gets each entry
    while(false !== ($entryName=readdir($myDirectory))) {
      if ('index.php' !== $entryName) {
        $dirArray[]=$entryName;
      }
    }
 

Ответ №2:

Если я правильно понял код и вопрос. Вы должны просто иметь оператор if в вашем while, чтобы пропустить любой файл с именем «index.php »

 while($entryName=readdir($myDirectory)) {
          if($entryName != 'index.php'){
          $dirArray[]=$entryName;
          }
        }