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 回答