- ベストアンサー
filemtimeについて
質問させていただきます。 filemtime関数についてですが、ある同階層のディレクトリ"ttt"の中にあるファイルの更新日付が15分以内だった場合、tttディレクトリと同階層にあるaaa.phpを実行したく考えております。 どのような方法がありますでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>これは「.」「..」ではじまるファイルで15分以内に更新があった場合も実行しちゃうという意味ですよね? そうではありません。 「.」はカレントディレクトリ、「..」はその親ディレクトリです。 $d->read() すると、そのディレクトリ内のファイルだけではなく、これらのディレクトリも取得されてしまいます。 とりあえず以下のようにすれば良いと思います。 「.」「..」は対象外にしています(in_arrayを使ってます)。 一回aaa.phpを実行したら、break文でwhileループから抜けています。 これで、aaa.phpが何回も実行されることを防いでます。 while (false !== ($entry = $d->read())) { $time = filemtime(YOUR_DIR.$entry); if(($now - $time ) > 900 && !in_array($entry, array('.', '..'))) { require(YOUR_DIR. "aaa.php"); break; } }
その他の回答 (2)
- fdsjaklfjas
- ベストアンサー率81% (96/118)
実行したいのがPHPのスクリプトなのであれば、以下のように、require関数などを使えばよいと思います。 require(YOUR_DIR."aaa.php"); あと何点か気付いた点です。 >if(($now - $time ) > 15){ だと15分ではなく、15秒になってしまいます。 >ある同階層のディレクトリ"ttt"の中にあるファイルの更新日付 ご提示のプログラムだと、更新日付が15秒以内のファイルの数分だけ、aaa.phpが実行されます(更新日付が15秒以内のファイルが3つあれば、3回aaa.phpが実行される)。なお、UNIXシステムだと「.」「..」もファイルとしてカウントされてしまいます。それでいいんでしょうか。
補足
秒について治しましたが、"ファイルの数分だけ実行"してしまうのは意図していないため"1つでもあったら一回のみaaa.phpを実行"に変えたいです。 そのための追加処理がわかりません。 ====== <?php $now = time(); $d = dir(YOUR_DIR); while (false !== ($entry = $d->read())) { $time = filemtime(YOUR_DIR.$entry); if(($now - $time ) > 900){ require(YOUR_DIR "aaa.php"); } } $d->close(); ?> ====== >UNIXシステムだと「.」「..」もファイルとしてカウントされてしまいます これは「.」「..」ではじまるファイルで15分以内に更新があった場合も実行しちゃうという意味ですよね? それについては問題ないです。
- fdsjaklfjas
- ベストアンサー率81% (96/118)
ご質問の内容を、そのまま実装すればよさそうですが。 どの辺が問題になっているんでしょうか?
補足
自分で試みているのは下記になりますが、 ※のところがわかりません。 <?php $now = time(); $d = dir(YOUR_DIR); while (false !== ($entry = $d->read())) { $time = filemtime(YOUR_DIR.$entry); if(($now - $time ) > 15){ ※ここがわかりません } } $d->close(); ?>
お礼
参考書ではなかなか見つけられない情報をありがとうございました。 助かりました。