PHP автозапуск с загрузкой скрипта - PullRequest
2 голосов
/ 06 мая 2009

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

Также существует ли глобальная память, доступная для пользователей? Также о памяти нет памяти, которая доступна всем пользователям? Один человек установил, что другой человек имеет к нему доступ, или мне придется каждый раз читать и записывать в файл, чтобы какая-то вещь могла быть использована совместно или, скорее, временной таблицей базы данных.

Удивленный PHP не имеет этого?

Спасибо.

Ответы [ 5 ]

7 голосов
/ 06 мая 2009

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

Если вы хотите настроить глобальные константы, которые не требуют больших затрат для вычисления, вы можете написать скрипт, который определяет эти константы, а затем автоматически запустить этот скрипт перед запрошенным файлом. Это делается с помощью опции auto_prepend_file в php.ini.

Если вы вычисляете дорогостоящие значения, вы можете использовать memcached в качестве глобального кэша, доступного для всех сценариев PHP. Существует несколько клиентских API для подключения к memcached с использованием PHP.

Конечно, вы также можете хранить глобальные значения в пользовательском сеансе , если эти значения для каждого пользователя. Или даже использовать MySQL.

2 голосов
/ 06 мая 2009

Если я правильно понимаю, вы хотите, чтобы PHP запускал некоторый скрипт при запуске Apache, чтобы хранить некоторые глобально общие значения. Если я не прав, пожалуйста, отредактируйте / прокомментируйте.

Короткий ответ: нет, вы не можете этого сделать. PHP не совсем сервер, который продолжает работать в ожидании клиентских запросов. Он обрабатывает каждый HTTP-запрос индивидуально.

Длинный ответ: ну ... вы можете сделать auto_prepend_file, чтобы делать это при каждом запросе. Вы можете создать простой скрипт bash и использовать его для запуска Apache, затем вызвать скрипт PHP, но он не будет выполняться в Apache.

Что касается разделяемой памяти, есть несколько вариантов. Использование плоских файлов, базы данных или memcached, вероятно, является наиболее переносимым. В некоторых установках включены функции Shared Memory , но это не гарантируется.

0 голосов
/ 14 марта 2012

Если вы используете какую-то подсистему (например, разделяемую память APC или даже memcached), вы можете автоматически запускать скрипт генератора данных при запуске apache, редактируя его скрипт запуска (/etc/init.d/[apache2|httpd]). Например, вы можете добавить запрос curl или wget в скрипт генератора сразу после запуска | restart.

Существует небольшая вероятность неинициализированного состояния при первом «внешнем» запросе, но я уверен, что вы справитесь с этим.

0 голосов
/ 06 мая 2009

Каждый запущенный экземпляр скрипта PHP имеет свои глобальные переменные, функции, константы и т. Д., Нет способа скопировать переменную из одного запущенного экземпляра скрипта в другой напрямую. Однако существуют косвенные методы, такие как использование файлов, базы данных или memcached.

0 голосов
/ 06 мая 2009

Если вы используете какую-то инфраструктуру MVC, вы можете определить свои переменные там и убедиться, что файл загружается каждый раз. Вы можете использовать $ GLOBALS ['var_name'] = $ value; и получить доступ к этому в другом файле во время этого запроса.

...