Author: David Beniamine Date: To: guilde Subject: Php netcat broken pipe
Salut la Guilde,
J'ai un problème que j'ai du mal à comprendre ou plutôt à résoudre :
J'ai un serveur web (appelons le A) qui doit afficher des informations
situés sur un autre machine (appelons la B), ces deux machines
communiquent via une socket avec netcat :
+ Côté B il y a un script bash qui tourne avec un service systemd : il
écoute en permanence et quand il reçoit une commande get il réponds
l'information demandée
+ Côté A j'ai un script bash, appelé par la page web (php).
+ Quand j'essaye de lire un petit fichier comme ça (environ 15 lignes),
tout fonctionne très bien.
+ Cependant si j'essaye de lire un fichier plus gros (pour être précis 2
097 480 octets), j'ai un broken pipe. Concrètement sur la page web je ne
voit que une partie du fichier, mais si je lance le script depuis bash
(sans passer par php) j'ai bien le fichier entier.
Je suppose donc que php limite quelque chose quelque part, mais je ne
voit pas quoi. De plus la taille du fichier reçu n'est pas déterministe ....
Tests effectués :
+ Côté php utiliser Popen, exec ou shell_exec pour lancer le script : idem
+ Compter les caractères reçus depuis le script bash côté a (netcat |
wc -c) : le nombre de caractères reçu correspond bien à ce qui est
affiché par php, variable entre 0 et 10000, souvent une puissance de 2
+ Sur le pipe, gzip -c côté B, gunzip -c côté A : même comportement pour
bash, aucun caractères reçu quand le script est lancé depuis php
+ Augmenter la taille mémoire maximum php de 128M à 512M (même si on
parle que de 2M)
Est-ce que quelqu'un à une idée de comment je peux m'y prendre ?