Здесь много вопросов, на некоторые из которых нет канонического ответа. Поэтому, пожалуйста, прочитайте это как мои 0,02 доллара, а не как "фундаментальную правду".
- Проверка ввода: я считаю, что необходимо проверять ввод как можно раньше, в вашем случае это будет один раз сразу после запуска скрипта PHP, второй раз сразу после того, как скрипт python получит запрос через FIFO, и третий раз после того, как скрипт PHP получил ответ от FIFO.
- Формат данных интерфейса (экранирование): Вы можете (и IMHO должен) попытаться использовать проверенную в бою библиотеку, чтобы помочь вам достичь этого: на ум приходит JSON, поскольку и PHP, и Python имеют хорошие библиотеки кодирования / декодирования. В этом случае я бы кодировал данные непосредственно перед записью в FIFO и декодировал их сразу после. Фактически, вы можете рассмотреть пару методов "send_to_interface" / "receive_from_interface" на каждой стороне, которая сочетает в себе кодирование / запись, соответственно. чтение / декодирование в атом. Если вы когда-нибудь захотите использовать другой интерфейсный механизм, вам просто нужно создать новую пару пар, не затрагивая остальную часть кода.
- Владение и привилегии FIFO: я бы пошел по пути создания группы, состоящей только из пользователя сервиса и пользователя www, а затем сделал бы
chgrp servicegroup && chmod 660
FIFO. Возможно, вы захотите исследовать использование сокета вместо FIFO - это облегчает ситуацию с привилегиями и подготавливает вас к ситуации, когда служба и веб-сервер не работают на одной машине. В зависимости от того, что делает ваш python-сервис, он также может окупиться, если запустит его в веб-слое и использует cURL на стороне PHP для доступа к нему. Инкапсуляция, предложенная в пуле, облегчает переключение между такими различными механизмами.