PHP планировщик без cron - PullRequest
       0

PHP планировщик без cron

3 голосов
/ 11 февраля 2012

Я хочу запускать свой php-скрипт каждые 5 минут.Вот мой PHP-код.

function call_remote_file($url){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);   
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
curl_close($ch);
}
set_time_limit(0);

$root='http://mywebsiteurl'; //remote location of the invoking and the working script

$url=$root."invoker.php";
$workurl=$root."script.php";

call_remote_file($workurl);//call working script
sleep(60*5);// wait for 300 seconds.
call_remote_file($url); //call again this script 

Я запускаю этот код один раз.Это работает отлично, даже после того, как я закрываю все окно браузера.

Проблема в том, что перестает работать, если я перехожу в интернет в моей системе.

Как решить эту проблему.Пожалуйста, помогите мне.

Ответы [ 2 ]

1 голос
/ 20 сентября 2013

Приведенный выше код в порядке, но если вы хотите добавить несколько сценариев для запуска с разными интервалами, кодирование становится намного более сложным.

Если вы попробуете phpjobscheduler (с открытым исходным кодом, так бесплатноиспользовать) предоставляет интерфейс для добавления, изменения и удаления скриптов для запуска.

1 голос
/ 11 февраля 2012

Хотя я бы не советовал делать это для чего-то критического (у вас будут проблемы со стабильностью), это может сработать:

function call_remote_file($url){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);   
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
curl_close($ch);
}
set_time_limit(0);


$root='http://mywebsiteurl'; //remote location of the invoking and the working script

$url=$root."invoker.php";
$workurl=$root."script.php";

while(true)
{
    call_remote_file($workurl);//call working script
    sleep(60*5);// wait for 300 seconds.
}

Другим способом было бы вызвать его из командной строкииспользуя exec():

function call_remote_file($url){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);   
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
curl_close($ch);
}
set_time_limit(0);


$root='http://mywebsiteurl'; //remote location of the invoking and the working script

$url=$root."invoker.php";
$workurl=$root."script.php";

call_remote_file($workurl);//call working script
sleep(60*5);// wait for 300 seconds.
exec('php ' . $_SERVER['SCRIPT_FILENAME']);

Вы действительно должны использовать cron, хотя, если это вообще возможно.

...