• ベストアンサー

ファイルコピー

「ルートディレクトリ内の全てのファイルの中でファイル名に"1111"及び"2222"と言う文字列が含まれるファイルを./333/444ディレクトリに同じファイル名が無ければコピーする」 というスクリプト(下記qqq.php)を作りましたが、 「ルートディレクトリ内の全てのファイルの中でファイル名に"1111"及び"2222"と言う文字列が含まれるファイルの中で最もファイル更新時刻が新しいものだけを./333/444ディレクトリに同じファイル名が無ければコピーする」 と変えたいのですがどうも上手くいきません。 この『・・・文字列が含まれるファイルの中で最もファイル更新時刻が新しいものだけを・・・』の部分につきまして、ご教授ください。 スクリプトを記載していただけるととても助かります。 どうか宜しくお願いいたします。 ********************* qqq.php <?PHP if ($dir = opendir("./")) { while (($file = readdir($dir)) !== false) { if(preg_match("/1111/",$file)) { if(preg_match("/2222/",$file)) { $to="./333/444/".$file; if(!file_exists($to)) copy("./".$file,$to); } } } closedir($dir); } ?>

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

  • ベストアンサー
  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.3

追加と訂正。 良く考えたら配列は要りませんね。 1.最も新しいファイルのファイル日付を覚えておく変数を「もっとも過去の日付」に、最も新しいファイルのファイル名を覚えておく変数を「空文字列」に初期化する 2.opendirする 3.readdirでファイル名を拾う 4.ファイル名が対象になる名前か調べる 5.対象ならfilemtimeでファイル更新時刻を得て、日付を覚えておく変数と比較する 6.変数よりファイルの更新時刻の方が新しいなら、日付を覚えておく変数にファイルの更新時刻を格納し、ファイル名を覚えておく変数にファイル名を格納する 7.全ファイルについてreaddirが終ったらclosedirする 8.ファイル名を覚えておく変数に入っている値が「空文字列」なら何もしない 9.ファイル名を覚えておく変数に入っているファイル名が対象なので、コピー先に同名ファイルが無いか調べ、無い場合のみコピーを行う

wf3255
質問者

お礼

ご回答どうもありがとうございます。 上記「空文字列」で行きたいと思います。

その他の回答 (2)

  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.2

「ルートディレクトリ内の全てのファイルの中でファイル名に"1111"及び"2222"と言う文字列が含まれるファイルの中で最もファイル更新時刻が新しいものだけを./333/444ディレクトリに同じファイル名が無ければコピーする」 を、文章通りに作るとしたら 1.opendirする 2.readdirでファイル名を拾う 3.ファイル名が対象になる名前か調べ、対象ならfilemtimeでファイル更新時刻を得て、配列に格納する 4.全ファイルについてreaddirが終ったらclosedirする 5.配列を最初から最後まで調べ、最も新しいものを見付ける 6.コピー先に同名ファイルが無いか調べ、無い場合のみコピーを行う と言う事になります。 >スクリプトを記載していただけるととても助かります。 残念ですが「試験問題を解いて下さい」「実際に動くプログラムを作って下さい」「スクリプトを記載して下さい」など、回答者に何かの作業を強いる質問は、このサイトでは禁止事項であり、そういう質問を投稿すると削除されます。

回答No.1

> 『・・・文字列が含まれるファイルの中で最もファイル更新時刻が新しいものだけを・・・』 ファイルの更新時刻はfilemtimeで取得出来ます。 int filemtime ( string filename ) (intはUNIXタイムスタンプ) http://www.php.net/manual/ja/function.filemtime.php qqq.phpのwhileの中で最新更新のファイルを求めて、後でコピーさせればいいと思います。

wf3255
質問者

お礼

アドバイスありがとうございます。whileの中で色々試してみたいと思います

関連するQ&A