如何使用PHP readdir排除某些文件类型?

时间:2011-08-31 21:34:41

标签: php

我使用的是php扫描目录脚本,它将扫描目录的内容,然后使用指向目录内容的链接填充页面。

<?php
$count = 0;
if ($handle = opendir('.')) {
while (false !== ($file = readdir($handle))) {
    if ($file != "." && $file != "..") {$count++;
        print("<a href=\"".$file."\">".$file."</a><br />\n");
    }
}
echo '<br /><br /><a href="..">Return</a>';
closedir($handle);
}
?

我想知道如何排除某些文件或文件类型,如test.xml,durka.xslt或.html,以显示在已填充的页面上。我有一些代码,但不知道如何集成它。任何帮助都将非常感激......

?php
if ($handle = opendir(‘.’)) {
while (false !== ($file = readdir($handle)))
{
if ($file != “.” && $file != “..”
&& $file != “NOT-TO-BE-IN-1.php”
&& $file != “NOT-TO-BE-IN-2.html”
&& $file != “NOT-TO-BE-IN-3.jpg”
&& $file != “”
&& $file != “”
&& $file != “”
&& $file != “”
&& $file != “”

)

6 个答案:

答案 0 :(得分:5)

<?php

  // These files will be ignored
  $excludedFiles = array (
    'excludeMe.file',
    'excludeMeAs.well'
  );

  // These file extensions will be ignored
  $excludedExtensions = array (
    'html',
    'htm',
    'php'
  );

  // Make sure we ignore . and ..
  $excludedFiles = array_merge($excludedFiles,array('.','..')); 

  // Convert to lower case so we are not case-sensitive
  for ($i = 0; isset($excludedFiles[$i]); $i++) $excludedFiles[$i] = strtolower(ltrim($excludedFiles[$i],'.'));
  for ($i = 0; isset($excludedExtensions[$i]); $i++) $excludedExtensions[$i] = strtolower($excludedExtensions[$i]);

  // Loop through directory
  $count = 0;
  if ($handle = opendir('.')) {
    while (false !== ($file = readdir($handle))) {
      $extn = explode('.',$file);
      $extn = array_pop($extn);
      // Only echo links for files that don't match our rules
      if (!in_array(strtolower($file),$excludedFiles) && !in_array(strtolower($extn),$excludedExtensions)) {
        $count++;
        print("<a href=\"".$file."\">".$file."</a><br />\n");
      }
    }
    echo '<br /><br /><a href="..">Return</a>';
    closedir($handle);
  }

?>

答案 1 :(得分:1)

<?php
$count = 0;
if ($handle = opendir('.')) {
while (false !== ($file = readdir($handle))) {
    if ($file != "." && $file != ".." 
    && $file != "NOT-TO-BE-IN-1.php"
    && $file != "NOT-TO-BE-IN-2.html"
    && $file != "NOT-TO-BE-IN-3.jpg"
    && substr($file,-strlen(".html")) != ".html" //if you don't want to include .html files, for instance
    && substr($file,-strlen(".js")) != ".js" //if you don't want to include .js files, for instance
    && $file != ""
    ) {$count++;
        print("<a href=\"".$file."\">".$file."</a><br />\n");
    }
}
echo '<br /><br /><a href="..">Return</a>';
closedir($handle);
}
?>

答案 2 :(得分:1)

其他方式:

$excludeExtensions = array(
    'php',
    'html',
    'jpg'
);

if ($file != "." && $file != ".." && !in_array(pathinfo($file, PATHINFO_EXTENSION), $excludeExtensions))
编辑:我太晚了:)

答案 3 :(得分:0)

<?php
if ($handle = opendir('.')) {
while (false !== ($file = readdir($handle)))
{
if ($file != "." && $file != ".."
&& $file != "NOT-TO-BE-IN-1.php"
&& $file != "NOT-TO-BE-IN-2.html"
&& $file != "NOT-TO-BE-IN-3.jpg"
&& $file != ""
&& $file != ""
&& $file != ""
&& $file != ""
&& $file != ""
)
    echo file_get_contents($file);

将显示所有未命名的页面的内容

  • NOT-TO-BE-IN-1.PHP
  • NOT-TO-BE-IN-2.HTML
  • NOT-TO-BE-IN-3.JPG

您可以使用

限制某些文件路径
if (!preg_match('/(php|html|jpg)/', $file))

答案 4 :(得分:0)

您也可以使用glob

foreach (glob("*.{php|html|jpg}",GLOB_BRACE) as $file) {
    echo file_get_contents($file);
}

请参阅http://php.net/manual/en/function.glob.php了解详情

答案 5 :(得分:0)

尝试类似:

$excluded_files = array('test.xslt');
$excluded_ext   = array('html');

while (false !== ($file = readdir($handle))) {
    if ($file != "." && $file != ".." &&
        !in_array($file, $excluded_files) &&
        !in_array(pathinfo($file, PATHINFO_EXTENSION), $excluded_ext)) 
    {
        // do stuff
    }
}