- ベストアンサー
ディレクトリ内の最新ファイルのみをコピーが上手くいかない
下記のようなスクリプトにより、 ./ディレクトリ内の更新日付が最新のファイル名を取得し、 そのファイルを./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); ?> 自力ではどこがヘンなのか理解できないため、どなたか教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
すみません、あまりにもいい加減過ぎました(笑。 最後は //if(!file_exists($to)) copy("./".$fnm,$to); if(!file_exists($to)) copy("./".$latestfilename,$to); にならなければいけませんね。
その他の回答 (2)
- taketan_mydns_jp
- ベストアンサー率58% (450/773)
あれ?まだ解決してませんでしたか? <?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)
> if($latestfile < $ftime){ > $latestfile = $ftime; > $latestfilename =$fnm; > $to="./bbb/".$fnm; > if(!file_exists($to)) copy("./".$fnm,$to); > } $latestfileが更新されるたびにファイルをコピーしていますね。 ファイルのコピーは最新のファイルを見つけ終わった後でするべきなので、 ifの中ではファイル名を別な変数に保存するようにしたら道でしょう?
お礼
御礼が遅くなってしまい申し訳ございません。 ご回答を参考にして解決できました。 感謝いたします。
お礼
御礼が遅くなってしまい申し訳ございません。 まさにかゆい所にダイレクトなご回答をいただき、 誠に感謝いたします。 どうもありがとうございました。