2009-07-22 15 views
1

私はPHPスクリプトを実行したいと思う毎時の関数itstime()を実行します。サーバー上でcronジョブを設定する以外に、どうすればいいですか?時間ベースのPHPスクリプト

また、PHPスクリプトを開いて実行する必要があるため、これは不可能ですか?

ありがとうございました。

EDIT:いくつかの情報をログファイルに書きたいと思います。いくつかの変数に応じて、電子メールで送信します。

答えて

1

まあ、私は間違いなく目的のためのcronジョブをお勧めします。しかし理論的には、PHPスクリプトをitstime()に実行し、1時間スリープさせてループさせることができます。しかし、これはかなり狂っています。

スクリプトは次のようになります。

<?php 
include('whatever.php'); 
while(true) { 
    itstime(); 
    sleep(3600); 
} 
?> 

一つは、おそらくあなたの端末から取り外し、それを実行し続けるにするためにnohup php mycrazyscript.php &でそれを実行し、それを終了させるためにpkill -f mycrazyscriptを使用します。

これが狂っている理由は、睡眠中のPHPプロセスが1時間に59分間何もしないことに夢中になっていることです。また、実行時と実行中の両方が適切であることを確認する必要がありますどのcronがあなたを世話するでしょうか。

+0

どうすればよいですか?なぜあなたはそれが狂っていると言いますか? – lanrat

+0

私はそれにアプローチする方法を選択するのは間違いですが、cronがオプションでない場合は、唯一の選択肢かもしれません。 – Christian

+0

私はこの方法を使用した場合、それは私がこのページを訪れたとき(スクリプトを開始するために)、ロードを完了することは決してないでしょうか? この場合、ページが終了するとスクリプトは実行を停止しますか? – lanrat

1

カオスの回答に追加するだけなので、彼に信用を与えてください。

mrlanrat - あなたはすべての時間あなたの機能を起動するために使用することができ、クーロンへのアクセス権を持っていないが、適度に忙しいWebサーバへのアクセスを持っていない場合はthis

+0

@chaosにコメントとして追加すると、彼にクレジットを与えるのに役立ちます –

1

を参照してください。これは、WordPressがcronを必要とするところです。ここではあなたがそれを行う可能性があります方法は次のとおりです。

もちろん
<?php 
$lastrun = get_last_run_time(); // get value from database or filesystem 
if(time()-$lastrun > 60*60) { 
    itstime(); 
    set_last_run_time(time()); // write value back to database or filesystem 
} 
// The rest of your page 
?> 

であるように、かなり深刻な競合状態がこのコードにあります。それを解決することは、読者に練習として残されています。

+0

これは良い解決策ですが、このページ/サイトは定期的に訪問されないので、この場合はうまくいかないと思います。 – lanrat

0

https://www.setcronjob.com/およびvarious other sitesは、これにウェブベースのソリューションを提供します。あなたは毎時間またはあなたが望む何でもあなたのコードでPHPスクリプトを呼び出すように設定することができます

<?php 
    itstime(); 

?> 
関連する問題