0

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

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

<?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]);
            }
        }
    }
}

?> 

谢谢!

4

2 回答 2

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
    }
}

查看另一个使用 GlobIterator 的示例

于 2012-10-22T16:21:52.003 回答
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]);
            }
        }
    }
}

?> 
于 2012-10-22T16:23:40.690 回答