0

ディレクトリ(この場合はfiles/)を開き、このディレクトリ内のすべてのファイル名(ディレクトリまたは「..」または「.」を含まない)をスキャンし、検索するプログラムを作成しようとしています「ページ」配列からの指定されたファイルのファイル名。ファイル名がページに見つからない場合、ファイルは「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]);
            }
        }
    }
}

?> 

ありがとうございました!

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 に答える