PHP-скрипт, который запускается на сервере без запроса клиента - PullRequest
2 голосов
/ 27 августа 2009

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

любые идеи приветствуются.

Ответы [ 6 ]

8 голосов
/ 27 августа 2009

Предполагая, что вам нужно сделать это в Linux, вы можете запустить любой скрипт php из браузера, а также из CLI.

Вы можете запустить простой скрипт php: <? echo "Ana are mere"; ?>

вот так: php -f ./index.php

Будьте осторожны с правами доступа к файлам, и любая ошибка, которая может проникнуть в ваш код, утечки памяти или нераспределенные переменные, станет ОЧЕНЬ видимой, поскольку процесс будет выполняться непрерывно.

Если вы не хотите, чтобы он постоянно работал в фоновом режиме, посмотрите на crontab (http://unixgeeks.org/security/newbie/unix/cron-1.html), чтобы иметь возможность регулярно запускать задания.

- редактировать -

взгляните на php, выполните фоновый процесс и PHP: как вернуть информацию в сценарий ожидания и продолжить обработку

Обычно вы хотите запустить фоновый процесс, и вы можете сделать это, используя exec () или fsockopen () или file_get_contents () в вашем собственном скрипте, вероятно, в таком порядке, если у вас нет доступа к exec или функции сокета. Также взгляните на http://us2.php.net/manual/en/function.session-write-close.php, чтобы «фоновый скрипт» не «блокировал» запрос и http://us2.php.net/manual/en/function.ignore-user-abort.php

3 голосов
/ 27 августа 2009

Используйте задание cron, чтобы сделать это http://www.cronjobs.org/

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

Вам также следует рассмотреть возможность размещения уникального ключа в конце страницы

т. www.yoursite.com/cronjob.php?key=randomstring

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

1 голос
/ 27 августа 2009

Если у вас нет доступа к серверу, возможно, самый простой способ - это запустить его через браузер, но для этого потребуется, чтобы вы или внешний скрипт обращались к URL с одинаковым интервалом каждый день, когда вы хотите, чтобы он один. Вы также можете установить набор тестов Selenium , который запускается локально по расписанию и попадает на страницу. Я не на 100%, если это возможно с Selenium, вам могут понадобиться сторонние приложения, чтобы это произошло.

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

1 голос
/ 27 августа 2009

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

Даже если вы сделаете while (1) в вашем скрипте, apache / php автоматически остановит ваш скрипт. Отвечая на ваш комментарий, да, для этого вам понадобится доступ по ssh, кроме случаев, когда ваш веб-интерфейс позволяет добавлять cronjob.

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

1 голос
/ 27 августа 2009

Как сказали Evernoob и Quamis , вы хотите иметь задание cron (UNIX / Linux / Mac OS) или запланированное задание (MS Windows). Кроме того, вы можете запустить скрипт PHP с использованием интерфейса командной строки PHP (CLI), в этом случае вы можете вызвать исполняемый файл PHP, а затем имя вашего скрипта. В качестве альтернативы вы можете использовать такой инструмент, как wget (доступен на всех платформах) для вызова сценария PHP, как если бы кто-то набрал URL-адрес в строке адреса веб-браузера.

1 голос
/ 27 августа 2009

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

Это действительно хак, но если вы абсолютно не можете настроить работу cron, это будет вариант.

...