ホームページ  >  記事  >  バックエンド開発  >  PHP スケジュールされたタスクのサンプル コード共有

PHP スケジュールされたタスクのサンプル コード共有

黄舟
黄舟オリジナル
2018-05-15 14:23:132343ブラウズ

以前、PHP スケジュールされたタスクの原理と、スケジュールされたタスクのスケジュールされた実行の実装を紹介しましたが、プロジェクトでリモート データベースを処理する必要がある場合、今日はそれを紹介します。 phpのスケジュールされたタスクの処理例を紹介します。

今回、PHPを使用してスケジュールされたタスクを実装するには、主にignore_user_abort()set_time_limit(0)sleep()の3つの関数を使用します。

<table width="620" align="center" border="0" cellpadding="1" cellspacing="1" style="background:#FB7"> 
<tr> 
<td width="464" height="27" bgcolor="#FFE7CE"> 代码如下</td> 
<td width="109" align="center" bgcolor="#FFE7CE" style="cursor:pointer;" onclick="doCopy(&#39;copy1032&#39;)">复制代码</td> 
</tr> 
<tr> 
<td height="auto" colspan="2" valign="top" bgcolor="#FFFFFF" style="padding:10px;" class="copyclass" id=copy1032>

<?php 
ignore_user_abort(); //即使Client断开(如关掉浏览器),PHP脚本也可以继续执行. 
set_time_limit(0); // 执行时间为无限制,php默认的执行时间是30秒,通过set_time_limit(0)可以让程序无限制的执行下去 
$interval=60*5; // 每隔5分钟运行 
do{ 
$fp = fopen(&#39;test.txt&#39;,&#39;a&#39;); 
fwrite($fp,&#39;test&#39;); 
fclose($fp); 
sleep($interval); // 等待5分钟 
}while(true); 
?>

</td> </tr> </table>

具体的なコードは以下の通りです:

<table width="620" align="center" border="0" cellpadding="1" cellspacing="1" style="background:#FB7"> 
<tr> <td width="464" height="27" bgcolor="#FFE7CE"> 代码如下</td> 
<td width="109" align="center" bgcolor="#FFE7CE" style="cursor:pointer;" onclick="doCopy(&#39;copy7070&#39;)">复制代码</td> 
</tr> 
<tr> 
<td height="auto" colspan="2" valign="top" bgcolor="#FFFFFF" style="padding:10px;" class="copyclass" id=copy7070>

<?php
ignore_user_abort();//该函数的作用是当用户关掉浏览器后,PHP脚本也可以继续执行.
set_time_limit(3000);// 通过set_time_limit(0)可以让程序无限制的执行下去
$interval=5;// 每隔5s运行
//方法1--死循环
do{
 echo &#39;测试&#39;.time().&#39;<br/>&#39;; 
 sleep($interval);// 等待5s    
}while(true);
//方法2---sleep 定时执行
require_once &#39;./curlClass.php&#39;;//引入文件
$curl=new httpCurl(&#39;www.phpernote.com&#39;);//实例化
$stime=$curl->getmicrotime();
for($i=0;$i<=10;$i ){
 echo &#39;测试&#39;.time().&#39;<br/>&#39;; 
 sleep($interval);// 等待5s
}
ob_flush();
flush();
$etime=$curl->getmicrotime();
echo &#39;<hr>&#39;;
echo round(($etime-stime),4);//程序执行时间

</td> </tr> </table>

Function intignore_user_abort:

関数名自体からすると「ユーザーの影響を無視する」と解釈できます
いわゆるユーザーが参照しているためクライアント、つまりブラウザへの影響です
それでは、さらに説明すると、「ブラウザの影響を無視する」です

では、影響とは何を指すのでしょうか?影響とは、ブラウザの終了と例外を指します

つまり, この関数を備えた PHP プログラムでは、ブラウザを閉じても、プログラムが完了するまで実行され続けることがあります。たとえば、100 秒間実行する必要があるコードがありますが、今回はそれです。ほとんどのユーザーは待ちきれず、60 秒待っても耐えられません。この時点でプログラムが終了すると、データの異常、不整合、またはエラーが発生する可能性があります。プログラムの実行を継続するには、それを使用できます

パラメーターは true と false で、true は無視、false を意味します。無視しないでください

具体的な実装プロセスでは、PHP のスケジュールされたタスクの実行の効率は高くないと個人的に感じています。スケジュールされたタスクの実行はシェルに任せることをお勧めします。この方法は、シェルの実装にはあまりにも抵抗があります。

2. Linux スクリプト プログラム

crontab コマンドは主にここで使用されます

使用方法:

crontab   filecrontab [ -u user ] [ -u user ] { -l | -r | -e }

説明:

crontab は、ユーザーが一定の時間または一定の間隔でプログラムを実行できるようにするために使用されます。 crontab でシェル スクリプトを作成し、PHP にシェルを呼び出させます。これは Linux の特性を利用するものであり、PHP 独自の言語の特性としてカウントされるべきではありません

Crontab でスクリプトを実行するには URL を使用します

PHP スクリプトの場合URL によってトリガーできます。lynx、curl、または wget を使用して Crontab を設定できます。

以下の例は、Lynx テキスト ブラウザを使用して URL にアクセスし、1 時間ごとに PHP スクリプトを実行します。 Lynx テキスト ブラウザは、デフォルトで会話モードを使用して URL を開きます。ただし、以下に示すように、lynx コマンド ラインで -dump オプションを使用して、URL 出力を標準出力に変換します。

<table width="620" align="center" border="0" cellpadding="1" cellspacing="1" style="background:#FB7"> 
<tr> <td width="464" height="27" bgcolor="#FFE7CE"> 
代码如下</td> 
<td width="109" align="center" bgcolor="#FFE7CE" style="cursor:pointer;" onclick="doCopy(&#39;copy7213&#39;)">复制代码</td> 
</tr> <tr> <td height="auto" colspan="2" valign="top" bgcolor="#FFFFFF" style="padding:10px;" class="copyclass" id=copy7213>
00 * * * * lynx -dump http://www.111cn.net /script.php
</td> 
</tr> 
</table>

以下の例は、C

URLを使用して

URLにアクセスし、5分ごとにPHPスクリプトを実行する例です。 Curl は、デフォルトで出力を標準出力に表示します。 「curl -o」オプションを使用して、スクリプトの出力を一時ファイルにダンプすることもできます。

<table width="620" align="center" border="0" cellpadding="1" cellspacing="1" style="background:#FB7"> 
<tr> 
<td width="464" height="27" bgcolor="#FFE7CE"> 
代码如下</td> 
<td width="109" align="center" bgcolor="#FFE7CE" style="cursor:pointer;" onclick="doCopy(&#39;copy6465&#39;)">复制代码</td> 
</tr> 
<tr> 
<td height="auto" colspan="2" valign="top" bgcolor="#FFFFFF" style="padding:10px;" class="copyclass" id=copy6465>
*/5 * * * * /usr/bin/curl -o temp.txt http://www.111cn.net /script.php</td> 
</tr> 
</table>

以下の例は、WGET を使用して URL にアクセスし、10 分ごとに PHP スクリプトを実行します。 -q オプションは、Quiet モードを示します。 「-O temp.txt」は、出力が一時ファイルに送信されることを意味します。

<table width="620" align="center" border="0" cellpadding="1" cellspacing="1" style="background:#FB7"> 
<tr> 
<td width="464" height="27" bgcolor="#FFE7CE"> 
代码如下</td> 
<td width="109" align="center" bgcolor="#FFE7CE" style="cursor:pointer;" onclick="doCopy(&#39;copy1200&#39;)">复制代码</td> 
</tr> 
<tr> 
<td height="auto" colspan="2" valign="top" bgcolor="#FFFFFF" style="padding:10px;" class="copyclass" id=copy1200>
*/10 * * * * /usr/bin/wget -q -O temp.txt http://www.111cn.net /script.php
</td> </tr> </table></td> </tr> </table>

概要:

この記事は、実際のプロジェクト開発プロセスを通じて実装された PHP 計画タスクの例であり、開発作業に役立ちます。

関連する推奨事項:

PHP でスケジュールされたタスクのスケジュールされた実行を実装するにはどうすればよいですか?

計画されたタスクのPHP実装の原理分析

phpはスケジュールされたタスクと継続的プロセスインスタンスを実装します fsockopen


phpのスケジュールされたタスクを使用してユーザーの接続ステータスを検出します

以上がPHP スケジュールされたタスクのサンプル コード共有の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。