• ベストアンサー

filemtimeについて

質問させていただきます。 filemtime関数についてですが、ある同階層のディレクトリ"ttt"の中にあるファイルの更新日付が15分以内だった場合、tttディレクトリと同階層にあるaaa.phpを実行したく考えております。 どのような方法がありますでしょうか?

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

  • ベストアンサー
回答No.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; } }

wf3255
質問者

お礼

参考書ではなかなか見つけられない情報をありがとうございました。 助かりました。

その他の回答 (2)

回答No.2

実行したいのがPHPのスクリプトなのであれば、以下のように、require関数などを使えばよいと思います。 require(YOUR_DIR."aaa.php"); あと何点か気付いた点です。 >if(($now - $time ) > 15){ だと15分ではなく、15秒になってしまいます。 >ある同階層のディレクトリ"ttt"の中にあるファイルの更新日付 ご提示のプログラムだと、更新日付が15秒以内のファイルの数分だけ、aaa.phpが実行されます(更新日付が15秒以内のファイルが3つあれば、3回aaa.phpが実行される)。なお、UNIXシステムだと「.」「..」もファイルとしてカウントされてしまいます。それでいいんでしょうか。

wf3255
質問者

補足

秒について治しましたが、"ファイルの数分だけ実行"してしまうのは意図していないため"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分以内に更新があった場合も実行しちゃうという意味ですよね? それについては問題ないです。

回答No.1

ご質問の内容を、そのまま実装すればよさそうですが。 どの辺が問題になっているんでしょうか?

wf3255
質問者

補足

自分で試みているのは下記になりますが、 ※のところがわかりません。 <?php $now = time(); $d = dir(YOUR_DIR); while (false !== ($entry = $d->read())) { $time = filemtime(YOUR_DIR.$entry); if(($now - $time ) > 15){ ※ここがわかりません } } $d->close(); ?>

関連するQ&A

専門家に質問してみよう