2009-07-22 3 views
1

Скажем, я хочу, чтобы php-скрипт запускал функцию itstime() каждый час. Помимо настройки задания cron на сервере, как я могу это сделать?Временной скрипт php

Или это невозможно, поскольку скрипты php необходимо открыть для запуска?

Спасибо.

EDIT: Я хочу записать некоторую информацию в файл журнала и в зависимости от некоторых переменных отправить ее по электронной почте.

ответ

1

Ну, я определенно рекомендую работу cron для этой цели. Но теоретически вы можете запустить PHP-скрипт itstime(), спящий час и цикл. Это довольно сумасшедшее.

Сценарий будет выглядеть следующим образом:

<?php 
include('whatever.php'); 
while(true) { 
    itstime(); 
    sleep(3600); 
} 
?> 

Можно было бы, вероятно, запустить его с nohup php mycrazyscript.php &, чтобы отделить его от вашего терминала и сделать его продолжать работать, и с помощью pkill -f mycrazyscript прекратить его действие.

Причина, по которой это безумие, заключается в том, что теперь у вас есть спящий PHP-процесс, который висит вокруг ничего не делая за 59 минут из каждого часа, и вы должны убедиться, что он работает и работает в нужное время, оба который cron позаботится о вас.

+0

Как я могу это сделать? и почему вы говорите, что это сумасшедший? – lanrat

+0

Да, конечно, не мой выбор способов приблизиться к нему, но если cron не вариант, может быть единственной альтернативой. – Christian

+0

Если бы я использовал этот метод, это означало бы тогда, когда я посетил эту страницу (чтобы запустить скрипт), он никогда не завершит загрузку? Если это так, сценарий перестанет работать после выхода страницы? – lanrat

1

Только добавление к ответу хаоса, поэтому дайте ему кредит.

mrlanrat - см this

+0

добавив его в качестве комментария к ответу @chaos, поможет ему дать кредит –

1

Если у вас нет доступа к хрон, но есть доступ к умеренно занят веб-сервер, вы можете использовать его, чтобы вызвать вашу функцию каждый час. Это то, как WordPress обходит необходимость в cron. Вот как вы это сделаете:

<?php 
$lastrun = get_last_run_time(); // get value from database or filesystem 
if(time()-$lastrun > 60*60) { 
    itstime(); 
    set_last_run_time(time()); // write value back to database or filesystem 
} 
// The rest of your page 
?> 

Конечно, в этом коде есть довольно серьезное состояние гонки. Решение, которое остается в качестве упражнения для читателя.

+0

Это хорошее решение, однако эта страница/сайт не будет посещаться регулярно, поэтому я не думаю, что это сработает в этом случае. – lanrat

0

https://www.setcronjob.com/ и various other sites, предоставите веб-решение для этого. Вы можете настроить его для вызова php-скрипта с кодом в нем каждый час или что угодно.

<?php 
    itstime(); 

?> 
Смежные вопросы