Há muitas perguntas aqui, algumas das quais não têm uma resposta canônica. Então, por favor, leia isto como meu $ 0.02, não como uma "verdade fundamental".
- Validação de entrada: Eu considero diligente validar a entrada o mais cedo possível, no seu caso isso seria uma vez imediatamente após o script PHP ser iniciado, a segunda vez imediatamente após o script python ter recebido o pedido via o FIFO, e a terceira vez após o script PHP ter recebido a resposta do FIFO.
- Formato de dados de interface (escape): Você pode (e IMHO) tentar usar uma biblioteca testada em batalha para ajudá-lo: JSON vem à mente, já que PHP e Python têm boa codificação / decodificação bibliotecas. Nesse caso, eu codificaria os dados imediatamente antes de gravá-los no FIFO e decodificá-los imediatamente depois. De fato, você pode querer considerar um par de métodos "send_to_interface" / "receive_from_interface" em cada lado, que combina codificação / escrita resp. leitura / decodificação em um átomo. Se você quiser usar um mecanismo de interface diferente, basta criar um novo par de pares sem precisar tocar no restante do código.
-
Propriedade e privilégios do FIFO: Eu seguia a rota de criar um grupo consistindo apenas no usuário do serviço e no usuário www, então faça um
chgrp servicegroup && chmod 660
no FIFO. Você também pode querer pesquisar usando um soquete em vez de um FIFO - isso facilita a situação de privilégios e prepara você para uma situação em que o serviço e o servidor da Web não são executados na mesma máquina. Dependendo do que seu serviço python faz, ele também pode pagar para executá-lo em uma camada da web e usar cURL no lado do PHP para acessá-lo. O encapsulamento sugerido na bala antes facilita a troca entre mecanismos tão diferentes.