PHP: общая память между Web и командной строкой - PullRequest
0 голосов
/ 05 июля 2018

У меня есть веб-приложение, которое я пишу, которое загружает базу данных конфигурации в общую память для быстрого доступа. Проблема, с которой я сталкиваюсь, заключается в том, что при работе с веб-сервера (в данном случае Apache) возникает разрыв соединения между общей памятью и при запуске из командной строки с помощью php -f. Это разрабатывается на компьютере с Windows 10, но рабочий сервер работает под управлением Unix. Похоже, что работает под Unix.

Единственная соответствующая информация, которую мне удалось найти, была этот вопрос здесь, на StackOverflow. Я знаю, что операции с общей памятью между Unix и Windows принципиально различаются, но когда я использую один и тот же идентификатор (ключ) для идентификации области общей памяти, не должен ли он обращаться к той же области независимо от среды выполнения?

Я знаю, что это работает под Unix, потому что я пробовал это. Один из других разработчиков использует Macintosh, и он тоже работает там. Windows, кажется, не работает. В руководстве по PHP указано, что в версиях Windows до 2000 года общая память недоступна.

Значит, разъединение в общей памяти между CLI и Web в Windows является чем-то присущим платформе? Ответ в связанном вопросе, похоже, указывает на «да», но его спросили в 2009 году. С тех пор прошло 9 с лишним лет?

Это работает под управлением Windows 10, Apache 2.4, PHP 7.2 и MySQL 5.17.

Я не слишком разбираюсь в программировании для Windows, поскольку пришел из среды Unix и в прошлом использовал общую память System V для IPC.

1 Ответ

0 голосов
/ 07 июля 2018

Поработав некоторое время, я понял это.

Windows

Оказывается, поскольку Windows не имеет общей памяти в стиле Unix, PHP имитирует ее. Из-за этого разделяемая память PHP, работающая под Apache, и из командной строки отделены.

UNIX

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

ИСПРАВЛЕНИЕ

Для Windows его нет, потому что платформа просто не поддерживает его. Поэтому я просто должен признать, что инструменты командной строки, которые я написал на PHP, просто не будут работать под Windows. Они должны быть проверены под Unix для правильной функциональности.

...