использование разделяемой памяти в PHP
Задача - запускать некоторый скрипт по расписанию. Реализация - храним дату последнего запуска в файле, в index.php проверяем текущаю дату и дату из файла и, если пора, выполняем скрипт, перезаписываем дату в файле. mysql использовать нельзя.
Использование chron`а не желательно - при переносе сайтов с одного сервера на другой про кроны забывают, забывают удалять скрипты из крона при удалении файла и др.
Все норм, вот только если запускаемых по расписанию скриптов много, то обработка файла с датами занимает много времени. Как выход, хочу попробовать использовать разделяемую память.
Имеем две технологии - семафораы и разделяемую память. Первую нужно устанавливать отдельно - сомневаюсь, что все хостеры ставят у себя это расширение. Вторая, как написано в документации, работает на всех unix-системах!
Написал класс CChron, работающий на семафорах. Оттестил - все норм! Удобно, быстро и просто. Притащил сырци домой - Fatal error: call to undefined function sem_get()! Дома FreeBSD 6, Apache 2, PHP 5!
Вопрос - стоит ли использовать семафоры? Почему о них так мало говорят? Будут-ли проблемы с переносом сайта на другой unix-хостинг? Какие возможны проблемы? Как гарантировать, что к общей памяти будут иметь доступ только мои скрипты?
Цитата: GHopper
Притащил сырци домой - Fatal error: call to undefined function sem_get()! Дома FreeBSD 6, Apache 2, PHP 5!
... и Windows? Да? На винду IPC не портированн. Да и на никсах это расширение по дефолту не включено.
Цитата: GHopper
Вопрос - стоит ли использовать семафоры? Почему о них так мало говорят? Будут-ли проблемы с переносом сайта на другой unix-хостинг? Какие возможны проблемы? Как гарантировать, что к общей памяти будут иметь доступ только мои скрипты?
Для нужных задач конечно стоит.
Видимо потому что мало знают... но кто хочет, тот найдет и тот знает.
Если хост поддерживает IPC то не будет.
Вот в процессе работы и узнаешь.
Как? Это не твоя забота. Разделение прав использования системы ложится на разработчиков, вот пусть они и думают.
http://www.opennet.ru/base/dev/ipc_prog.txt.html
Цитата:
Note: Для Windows-платформ это расширение недоступно.
Цитата:
На винду IPC не портированн.
IPC - inter process communication
http://en.wikipedia.org/wiki/Inter-process_communication
Пайпы, сокеты и многое другое под виндой доступно, и для того чтобы использовать IPC, не надо ничего портировать. Давайте называть вещи своими именами
:D ......