>  기사  >  백엔드 개발  >  PHP에서 예약된 작업을 구현하는 방법은 무엇입니까?

PHP에서 예약된 작업을 구현하는 방법은 무엇입니까?

黄舟
黄舟원래의
2017-11-14 09:46:1724950검색

이전 기사에서 PHP 예약 작업의 구현 원리를 소개했습니다. 모두가 PHP 예약 작업의 원리를 이해하고 있다고 믿습니다. 그래서 오늘은 PHP가 예약 작업의 예약 실행을 구현하는 방법을 계속해서 소개하겠습니다.

강좌 추천: "PHP 온라인 교육 과정"

1. Windows 예약 작업

1. test.php라는 PHP 프로그램을 작성합니다. 다음과 같습니다

test.php,内容如下所示


<?   
    $fp = fopen("test.txt", "a+");   
    fwrite($fp, date("Y-m-d H:i:s") . " 成功成功了!\n");   
    fclose($fp);   
?>

程序大胆地写,什么includerequire尽管用,都没问题

2、新建Bat文件,命名为test.bat,内容如下所示:


D:\php\php.exe -q D:\website\test.php

3、建立WINDOWS计划任务:

开始–>控制面板–>任务计划–>添加任务计划

浏览文件夹选择上面的bat文件

设置时间和密码(登陆WINDOWS的)

保存即可了。

4、over! 可以右键计划任务点“运行”试试

二、linux 的脚本实现

一、在Crontab中使用PHP执行脚本

就像在Crontab中调用普通的shell脚本一样(具体Crontab用法),使用PHP程序来调用PHP脚本。

每一小时执行myscript.php如下:


# crontab -e  
00 * * * * /usr/local/bin/php /home/john/myscript.php

/usr/local/bin/php为PHP程序的路径。

二、在Crontab中使用URL执行脚本

如果你的PHP脚本可以通过URL触发,你可以使用lynx或curl或wget来配置你的Crontab。

下面的例子是使用Lynx文本浏览器访问URL来每小时执行PHP脚本。Lynx文本浏览器默认使用对话方式打开URL。但是,像下面的,我在lynx命令行中使用-dump选项来把URL的输出转换来标准输出。


00 * * * * lynx -dump http:
//www.centos.bz/myscript.php

下面的例子是使用CURL访问URL来每5分执行PHP脚本。Curl默认在标准输出显示输出。使用”curl -o”选项,你也可以把脚本的输出转储到临时文件。


*/5 * * * * /usr/bin/curl -o temp.txt http:
//www.centos.bz/myscript.php

下面的例子是使用WGET访问URL来每10分执行PHP脚本。-q选项表示安静模式。”-O temp.txt”表示输出会发送到临时文件


*/10 * * * * /usr/bin/wget -q -O temp.txt http:
//www.centos.bz/myscript.php

三、PHP实现定时执行计划任务

使用php让浏览器刷新需要解决几个问题

1、PHP脚本执行时间限制,默认的是30m 解决办法:set_time_limit();或者修改PHP.ini 设置max_execution_time时间(不推荐)

2、如果客户端浏览器关闭,程序可能就被迫终止,解决办法:ignore_user_abort即使关闭页面依然正常执行

3、如果程序一直执行很有可能会消耗大量的资源,解决办法使用sleep

<?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();//实例化   
     $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);//程序执行时间


프로그램은 대담하게 작성되었으므로 어떤 includerequire를 사용해도 문제가 없습니다

2. 새로운 Bat만들기 > 파일 이름을 test.bat로 지정하고 내용은 다음과 같습니다:


rrreee

3. WINDOWS 계획 수립 작업:


시작->제어판->작업 일정->작업 계획 추가

폴더를 찾아 위의 bat 파일을 선택하세요

설정 시간과 비밀번호(WINDOWS에 로그인) 저장하세요.

4. 예약된 작업을 마우스 오른쪽 버튼으로 클릭하고 "실행"을 클릭하여 시도해 볼 수 있습니다.

2. Linux 스크립트 구현

1. PHP를 사용하여 Crontab에서 스크립트를 실행합니다. Crontab과 마찬가지로 일반 쉘 스크립트(특정 Crontab 사용법)를 호출하는 것과 마찬가지로 PHP 프로그램을 사용하여 PHP 스크립트를 호출합니다.
다음과 같이 매시간 myscript.php를 실행합니다:

🎜🎜rrreee🎜🎜🎜🎜/usr/local/bin/php(PHP용) 프로그램의 경로입니다. 🎜🎜🎜2. URL을 사용하여 Crontab에서 스크립트 실행 🎜🎜🎜PHP 스크립트를 URL로 실행할 수 있는 경우 lynx, cur 또는 wget을 사용하여 Crontab을 구성할 수 있습니다. 🎜🎜아래 예는 Lynx 텍스트 브라우저를 사용하여 URL에 액세스하여 매시간 PHP 스크립트를 실행하는 것입니다. Lynx 텍스트 브라우저는 기본적으로 대화 모드를 사용하여 URL을 엽니다. 그러나 아래와 같이 lynx 명령줄에서 -dump 옵션을 사용하여 URL 출력을 표준 출력으로 변환합니다. 🎜

🎜🎜rrreee

🎜🎜rrreee🎜아래 예는 WGET을 사용하여 실행할 URL에 액세스하는 것입니다. 10분마다 PHP 스크립트. -q 옵션은 자동 모드를 나타냅니다. "-O temp.txt"는 출력이 임시 파일로 전송된다는 의미입니다🎜

🎜🎜rrreee 🎜🎜3. PHP는 예약된 작업의 예약된 실행을 구현합니다.🎜🎜🎜🎜PHP를 사용하여 브라우저를 새로 고치려면 여러 가지 문제를 해결해야 합니다.🎜🎜1. 기본값은 30m입니다. : set_time_limit();또는 max_execution_time 시간을 설정하도록 PHP.ini를 수정합니다(권장하지 않음) 🎜🎜🎜2. 클라이언트 브라우저가 닫히면 프로그램이 강제로 실행될 수 있습니다. 종료 해결 방법 : ignore_user_abort 페이지가 닫혀도 정상적으로 실행됩니다. 🎜🎜🎜3. 프로그램이 계속 실행되면 많은 리소스를 소비할 가능성이 높습니다. sleep으로 프로그램을 잠시 잠자게 했는데요. 그러다가 PHP 예약 실행 코드🎜🎜🎜🎜rrreee🎜를 실행할 때 효율성이 그다지 높지 않다는 것을 발견했습니다🎜🎜🎜요약:🎜🎜🎜🎜이것입니다. 이 기사에서는 Windows 예약 작업, Linux 스크립트 및 PHP를 사용하여 예약 작업을 실행합니다. 이 예제를 통해 PHP의 예약 작업 실행을 보다 직접적으로 이해할 수 있습니다. 도움이 되기를 바랍니다. 🎜🎜🎜관련 권장 사항: 🎜🎜🎜예약된 작업을 구현하는 PHP의 원리 분석🎜🎜🎜🎜🎜php 예약된 작업 및 연속 프로세스(fsockopen) 예제🎜🎜🎜🎜🎜php 예약된 작업 사용자 연결 상태 감지🎜🎜🎜

위 내용은 PHP에서 예약된 작업을 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.