检查文件目录中的字符串,但不包括子目录

时间:2012-10-22 16:13:11

标签: php html

我正在尝试编写一个程序,它将打开一个目录(在本例中为:files /),扫描该目录中的所有文件名(不包括任何目录或“..”或“。”),并从“pages”数组中搜索指定文件中的文件名。如果在页面中找不到文件名,则该文件将被移动到“unused-content”。

我当前的代码不起作用。我怎样才能实现这个目标?

<?php

if($handle = opendir('files/')) {
    while (false !== ($entry = readdir($handle))) {
        if ($entry != "." && $entry != "..") {
            $file_names[] = $entry;
        }
    }
    closedir($handle);
}

$pages = array("page1.html","page2.shtml","page_three.shtml","page4.htm","page5.shtml");

for($x=0; $x<sizeOf($pages); $x++) {
  $current_page = file_get_contents($pages[$x]);
    for($i=0; $i<sizeOf($file_names); $i++) {
        if(!strpos($current_page,$file_names[$i])) {
            if (copy("files/".$file_names[$i],"files/unused-content/".$file_names[$i])) {
                unlink("files/".$file_names[$i]);
            }
        }
    }
}

?> 

谢谢!

2 个答案:

答案 0 :(得分:1)

您不需要所有长代码。您只需要FilesystemIterator

$pages = array("1.xml","page2.shtml","page_three.shtml","page4.htm","page5.shtml");
$dir = new FilesystemIterator(__DIR__, FilesystemIterator::SKIP_DOTS);
foreach ( $dir as $file ) {
    if ($file->isFile() && in_array(strlen($file->getFilename()), $pages)) {
        // copy
        // unlink
    }
}

See another example using GlobIterator

答案 1 :(得分:0)

尝试做这样的事情:

<?php

if($handle = opendir('files/')) {
  $i=0;
    while (false !== ($entry = readdir($handle))) {
        if ($entry != "." && $entry != "..") {
            $file_names[$i] = $entry;
        }
        $i++;
    }
    closedir($handle);
}

$pages = array("page1.html","page2.shtml","page_three.shtml","page4.htm","page5.shtml");

for($x=0; $x<sizeOf($pages); $x++) {
  $current_page = file_get_contents($pages[$x]);
    for($i=0; $i<sizeOf($file_names); $i++) {
        if(!strpos($current_page,$file_names[$i])) {
            if (copy("files/".$file_names[$i],"files/unused-content/".$file_names[$i])) {
                unlink("files/".$file_names[$i]);
            }
        }
    }
}

?>