Home >Backend Development >PHP Tutorial >Several ways to implement scheduled tasks in PHP

Several ways to implement scheduled tasks in PHP

小云云
小云云Original
2018-03-31 10:09:4812784browse

This article mainly shares with you several ways to implement scheduled tasks in PHP. It mainly explains it to you in the form of text and code. I hope it can help you.

1. Simple, direct and reckless type

  1. <?php  
    ignore_user_abort();//关掉浏览器,PHP脚本也可以继续执行.  
    set_time_limit(0);// 通过set_time_limit(0)可以让程序无限制的执行下去  
    ini_set(&#39;memory_limit&#39;,&#39;512M&#39;); // 设置内存限制  
    $interval=60*30;// 每隔半小时运行  
    do{  
        //ToDo   
        sleep($interval);// 等待5分钟  
    }  
    while(true);

Disadvantages: Once started, it cannot be controlled unless the PHP host is terminated. Do not use this method , unless you are a hacker.

Related article recommendations:
1.How does PHP implement scheduled execution of scheduled tasks?
2.Instructions for PHP timer
Related video recommendations:
1.Dugu Jiujian(4)_PHP video tutorial

2. Simple and controllable

config.php

  1. <?php  
    return 1;  
    ?>

cron.php

  1. ignore_user_abort();//关掉浏览器,PHP脚本也可以继续执行.  
    set_time_limit(0);// 通过set_time_limit(0)可以让程序无限制的执行下去  
    $interval=60*30;// 每隔半小时运行  
    do{  
        $run = include &#39;config.php&#39;;  
        if(!$run) die(&#39;process abort&#39;);  
          
        //ToDo  
        sleep($interval);// 等待5分钟  
    }  
    while(true);

Stop the program by changing return 0 in config.php. A feasible way is to interact with the config.php file and a special form, and set some variables through the HTML page for configuration

Disadvantages: It takes up system resources and may cause some unexpected hidden dangers if it runs for a long time. For example, memory management issues.

3. Simple improved version

  1. <?php  
    $time=15;  
    $url="http://".$_SERVER[&#39;HTTP_HOST&#39;].$_SERVER[&#39;REQUEST_URI&#39;];  
    /* 
        function 
    */  
    sleep($time);  
    file_get_contents($url);  
    ?>

php script sleeps and continues execution by accessing itself after a period of time . Just like a relay race.. This ensures that the execution time of each PHP script will not be too long. It is not limited by time_out.

Because each time the PHP file is looped, it is executed independently. So this method avoids the limitation of time_out. But it is best to add the control code. cofig.php as above, so that the process can be terminated.

4. Server scheduled tasks

Unix platform

If you use a Unix system, you need to add a special line of code at the beginning of your PHP script so that it can be executed, so that the system knows what kind of program to use to run the script. The first line of code added for Unix systems will not affect the running of the script under Windows, so you can also use this method to write cross-platform scripts.

1. Use PHP to execute the script in Crontab

Just like calling an ordinary shell script in Crontab (specific Crontab usage), use the PHP program to call the PHP script and execute it every hour myscript.php is as follows:

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

/usr/local/bin/php is the path of the PHP program.

2. Use URL to execute scripts in Crontab

If your PHP script can be triggered by URL, you can use lynx or curl or wget to configure your Crontab.

The following example uses a Lynx text browser to access a URL to execute a PHP script every hour. Lynx text browser uses conversational mode to open URLs by default. However, as shown below, we use the -dump option on the lynx command line to convert the URL output to standard output.

00 * * * * lynx -dump http://www.sf.net/myscript.php

The following example uses CURL to access the URL to execute a PHP script every 5 minutes. Curl displays output on standard output by default. Using the "curl -o" option, you can also dump the output of the script to a temporary file temp.txt.

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

The following example uses WGET to access the URL to execute a PHP script every 10 minutes. The -q option indicates quiet mode. "-O temp.txt" means output will be sent to a temporary file.

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

5. Detailed explanation of ini_set function usage

PHP ini_set is used to set the value of php.ini, which takes effect when the function is executed. After the script ends, the setting becomes invalid. You can modify the configuration without opening the php.ini file, which is very convenient for virtual spaces.

Function format:

string ini_set(string $varname, string $newvalue)

Not all parameters can be configured, you can view the list in the manual.

Common settings:

@ ini_set(&#39;memory_limit&#39;, &#39;64M&#39;);

menory_limit:设定一个脚本所能够申请到的最大内存字节数,这有利于写的不好的脚本消耗服务器上的可用内存。@符号代表不输出错误。

@ini_set('display_errors', 1);

display_errors:设置错误信息的类别。

@ini_set(&#39;session.auto_start&#39;, 0);

session.auto_start:是否自动开session处理,设置为1时,程序中不用session_start()来手动开启session也可使用session,

如果参数为0,又没手动开启session,则会报错。

@ini_set(&#39;session.cache_expire&#39;, 180);

session.cache_expire:指定会话页面在客户端cache中的有限期(分钟)缺省下为180分钟。如果设置了session.cache_limiter=nocache时,此处设置无 效。

@ini_set(&#39;session.use_cookies&#39;, 1);

session.use_cookies:是否使用cookie在客户端保存会话ID;

@ini_set(&#39;session.use_trans_sid&#39;, 0);

session.use_trans_sid:是否使用明码在URL中显示SID(会话ID),

默认是禁止的,因为它会给你用户带来安全危险:

  1. 用户可能将包含有效的sid的URL通过email/irc/QQ/MSN等途径告诉其他人。

  2. 包含有效sid的URL可能会保存在公用电脑上。

  3. 用户可能保存带有固定不变的SID的URL在他们的收藏夹或者浏览历史记录里。 基于URL的会话管理总是比基于Cookie的会话管理有更多的风险,所以应当禁用。

相关推荐:

PHP结合Linux的cron命令实现定时任务实例

Linux定时任务Crontab命令详解

PHP执行定时任务的几种方法思路

The above is the detailed content of Several ways to implement scheduled tasks in PHP. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn