重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

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

どのような方法がありますでしょうか?

A 回答 (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;
}
}
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/01/05 20:27

実行したいのが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分以内に更新があった場合も実行しちゃうという意味ですよね?
それについては問題ないです。

補足日時:2007/01/04 11:02
    • good
    • 0

ご質問の内容を、そのまま実装すればよさそうですが。


どの辺が問題になっているんでしょうか?

この回答への補足

自分で試みているのは下記になりますが、
※のところがわかりません。

<?php
$now = time();
$d = dir(YOUR_DIR);
while (false !== ($entry = $d->read())) {
$time = filemtime(YOUR_DIR.$entry);
if(($now - $time ) > 15){
※ここがわかりません
}
}
$d->close();
?>

補足日時:2007/01/03 19:50
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!