1

私は初心者として、次の操作の反復プロセスをコーディングする方法について本当に混乱していることを認めます。

風景:私のファイルtest.phpは、特定のディレクトリにある最も古い.txtファイルをチェックし、それを「バックアップ」と呼ばれる別のディレクトリにコピーします。この後、同じファイルが「elab.php」(ファイルに含まれるデータでMySQLデータベースを更新)によって作成され、4秒のスリープ時間の後に連続して削除されます。

コードは次のとおりです。

 $files = glob( '*.txt' );

 array_multisort(
 array_map( 'filemtime', $files ),
 SORT_NUMERIC,
 SORT_ASC,
 $files
 );

 $filename="$files[0]";

 copy($filename,"./backup/$filename");  
 echo "<b> $filename </b>copied<br>";   

 include ("/home/mysite/directory/elab.php");

 sleep(4);

 unlink($filename);

ディレクトリに複数の.txtファイルがあるので、再帰的なプロセスを実行したいと思います。ディレクトリが空になるまで、すべての.txtファイルに対して操作を繰り返す必要があります。実行する方法?「foreach」または「if」または「while」を使用する方がよいかどうかわからないため、混乱しています。どれが一番いいですか?再帰チェックでファイルを変更するにはどうすればよいですか?

よろしくお願いします。

マット

4

2 に答える 2

1

glob独自のイテレータがありGlobIteratorます。これも、バックアップベースを日付でグループ化することをお勧めします。

$backup = __DIR__ . "/backups/" . date("Y-m-d");

if (! is_dir($backup))
    mkdir($backup) or trigger_error("Can't create directory");

$files = new GlobIterator(__DIR__ . "/test/*.txt");

foreach ( $files as $file ) {
    copy($file, $backup . DIRECTORY_SEPARATOR . $file->getFilename()); //copy file
    printf("<b>%s</b>copied<br>", $file->getFilename());
    unlink($file); //delete file
}
于 2012-10-22T10:08:13.297 に答える
0
$files = scandir('folder/');
foreach($files as $file) {
  //do your work here
}

また

$files = glob('folder/*.{txt}', GLOB_BRACE);
foreach($files as $file) {
  //do your work here
}
于 2012-10-22T10:09:46.230 に答える