毎日初回起動時のみ実行されるメソッドのPHP実装_PHPチュートリアル

WBOY
リリース: 2016-07-14 10:06:37
オリジナル
730 人が閲覧しました

あなたはそのような問題に遭遇したことがあるかどうかわかりません。つまり、毎日特定の時間にスケジュールされた実行など、いわゆるWebプログラムの実行がスケジュールされたプログラムを作成したいと考えています。 PHP にアクセスする必要があります。ブラウザを閉じた後もプログラムをバックグラウンドで実行し続けることを可能にする、ignore_user_abort(true); 関数があります。これは、スケジュールされた実行も実現できる同様の賢い自動実行メソッドを以前に書きましたが、結局のところ、このメソッドには欠点があります。そこで、もう一度考えてみます。必要に応じて、次善の方法で妥協し、毎日初めてログインするたびにシステムにそれを実行させることもできます。
この方法があなたのニーズに適しているかどうかについては、慎重に検討する必要があります。単に一部のデータの属性を変更するだけの機能であれば、毎日データを変更する必要はなく、システムに入った時点で最新の状態で表示されるのでこれに適しています。他の人が実行計画プログラムにアクセスできず、自分のユーザーだけがアクセスできる機能には適していません。とにかく、この実装がどのように行われるかについて話しましょう。
txt ファイルを使用して、この関数の最終操作時刻を yyyy-mm-dd の形式で保存し、現在時刻を取得する関数を作成し、それを yyyy-mm-dd の形式に変換して実行します。必要な操作が同じ場合は実行されません。実行後、現在時刻が yyyy-mm-dd の形式で txt ファイルに書き込まれます。これにより、システムにログインするユーザーは、ログインするたびに最初にこのメソッドを実行できるようになります。ただし、このような実行には大量のデータが含まれる可能性があることを考慮して、このメソッドの最大実行時間を無限に設定し、バックグラウンドで実行されるように設定することでこれを実行できます。フロントエンドユーザーがログインするホームページは、独自のページをロードした後、ajax を介してこのページにアクセスします。これで効率の問題は解決されませんか。
私のコードを見てみましょう。このプログラムを自動的に実行する機能を有効にするために、バックグラウンドで構成ファイルを作成することもできます。
//自動データ転送
関数turnMessage(){
set_time_limit(0);
ignore_user_abort(true);
グローバル $gzhuan,$guser,$hfdate1;
if('1'==$gzhuan){
$now = time();
$time = date('Y-m-d',$now);
$file = 'include/time.txt';
$f = fopen($file,'r+');
$t = fread($f,filesize($file));
fclose($f);
if($t!=$time){
$timeok = date('Y-m-d',$now-$hfdate1*86400);
$user = $this->tmp_mod->getOneUser($guser);
if($user){
$list = $this->tmp_mod->getGuoqi($timeok);
if($list[0]){
$ymd = date('Y-m-d H:i:s',$now);
$d['Adminid'] = $guser;
$d['Admin'] = $user['adminRealName'];
$d['hfzt'] = 1;
$d['YyTime'] = $time;
$d['zhuanru'] = 1;
foreach($list as $key=>$val){
$data['pro_id'] = $val['ID'];
$data['admin_id'] = 0;
$data['管理者名'] = 'システム';
$data['content'] = 'システムはこのデータを自動的に転送します。元の予約時間は次のとおりです:'.$val['YyTime'];
$data['日付'] = $ymd;
$data['type'] = 0;
$rs = $this->tmp_mod->addProBz($data);
$rs2 = $this->tmp_mod->editProducts($val['ID'],$d);
}
if($rs&&$rs2){
parent::innerLog('データを自動的に転送','1');
$f = fopen($file,'w+');
fwrite($f,$time);
fclose($f);
}その他{
parent::innerLog('データを自動的に転送','0');
}
}
}
}
}
unset($gzhuan,$guser,$hfdate1);
終了します;
}
上記の $this->tmp_mod-> およびその他のメソッドはすべてフレームワークでデータベースを操作するために使用するメソッドなので、詳細に説明する必要はありません。このように書いて ajax を使用して取得することは、ユーザーの効率に影響を与えず、目的を達成することも非常に良い選択だと思います。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/477923.html技術記事あなたがこのような問題に遭遇したことがあるかどうかはわかりません。つまり、PHP のような Web プログラムの場合、毎日特定の時刻に実行されるようにスケジュールされたプログラムを作成したいと考えています。呼び出された実行は必ず完了する必要があります...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート