2016-01-12 3 views
1

У меня есть процесс, который я хочу выполнить (используя exec()), но я хочу только его выполнить. Я пытался использовать глобальные переменные, но это не совсем сработало. Это то, что у меня есть:Выполнение фонового процесса только один раз

if ($started = false) { 
    $started = true; 
    exec("php something.php"); 
} 

Я не хочу, чтобы запустить только один раз, когда я загрузить страницу, но после загрузки страницы один раз и выполняется процесс, он никогда не будет выполняться после этого. Итак, как бы я это сделал?

(я не уверен, если это важно, но этот процесс включает в себя time_sleep_until, так что я не могу положить что-то в этой странице, после этого или отправить назад, я думаю ..)

+0

журнал где-то он запустил, db или файл –

+0

Вы должны сохранить информацию о том, что процесс был запущен где-то в постоянном хранилище, так же, как сказал @Dagon. Другого пути, кроме сеансов, нет, но тогда вы должны использовать фиксированный идентификатор для чтения и записи на одно и то же место. –

+1

Используйте '==' для сравнения, а не '='. – Barmar

ответ

1

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

if (! file_exists('lockfile')) { 
    file_put_contents('lockfile', '1'); 
    exec("php something.php"); 
} 

Также вы можете создать этот файл с содержимым «0». Если это «0», вы можете выполнить свой материал и записать «1» в файл. Таким образом, вы можете получить привилегии (chmod) только для этого файла.

Конечно, вы также можете сохранить такое состояние в MySQL, Redis, Mongo, ... Это всего лишь выбор пользы.