• ベストアンサー

ディレクトリ内の最新ファイルのみをコピーが上手くいかない

下記のようなスクリプトにより、 ./ディレクトリ内の更新日付が最新のファイル名を取得し、 そのファイルを./bbbディレクトリにコピーするということを行いたいのですが、 更新日付が最新のものに関わらず全てのファイルがコピーされてしまいます。 <?PHP $dir = opendir("./"); $latestfile = 0; while ($fnm = readdir($dir)) { if($fnm == "." || $fnm == "..") continue; $ftime = filemtime("$fnm"); if($latestfile < $ftime){ $latestfile = $ftime; $latestfilename =$fnm; $to="./bbb/".$fnm; if(!file_exists($to)) copy("./".$fnm,$to); } } closedir($dir); ?> 自力ではどこがヘンなのか理解できないため、どなたか教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

すみません、あまりにもいい加減過ぎました(笑。 最後は //if(!file_exists($to)) copy("./".$fnm,$to); if(!file_exists($to)) copy("./".$latestfilename,$to); にならなければいけませんね。

wf3255
質問者

お礼

御礼が遅くなってしまい申し訳ございません。 まさにかゆい所にダイレクトなご回答をいただき、 誠に感謝いたします。 どうもありがとうございました。

その他の回答 (2)

回答No.2

あれ?まだ解決してませんでしたか? <?PHP $dir = opendir("./"); $latestfile = 0; while ($fnm = readdir($dir)) {  if($fnm == "." || $fnm == "..") continue;  $ftime = filemtime("$fnm");  if($latestfile < $ftime){   $latestfile = $ftime;   $latestfilename =$fnm;   $to="./bbb/".$fnm; //  if(!file_exists($to)) copy("./".$fnm,$to);  } } closedir($dir); if(!file_exists($to)) copy("./".$fnm,$to); ?> テストしてないので自身ありませんが、コピーするタイミングを単にループの中からループが終わってからにしただけです。

  • sonetea
  • ベストアンサー率26% (9/34)
回答No.1

> if($latestfile < $ftime){ > $latestfile = $ftime; > $latestfilename =$fnm; > $to="./bbb/".$fnm; > if(!file_exists($to)) copy("./".$fnm,$to); > } $latestfileが更新されるたびにファイルをコピーしていますね。 ファイルのコピーは最新のファイルを見つけ終わった後でするべきなので、 ifの中ではファイル名を別な変数に保存するようにしたら道でしょう?

wf3255
質問者

お礼

御礼が遅くなってしまい申し訳ございません。 ご回答を参考にして解決できました。 感謝いたします。

関連するQ&A