J'ai le code PHP ci-dessous pour écrire à un filepointer $fp
qui a été ouvert à l'aide fsockopen
:de fwrite PHP cesse d'écrire à un pointeur de fichier socket
syslog(LOG_INFO, "Write " . strlen($buf) . " bytes to socket:");
$bytes = 0;
while ($bytes < strlen($buf) && ($w = @fwrite($fp, substr($buf, $bytes))))
{
syslog(LOG_INFO, " - " . $w . " bytes written to socket");
$bytes += $w;
}
if ($bytes != strlen($buf))
{
syslog(LOG_INFO, "error while writing to socket");
exit();
}
Ce code fonctionne bien aussi longtemps que la taille de $buf
est petite assez. Une grande quantité de données ne peut pas être écrite complètement. Je reçois la sortie suivante:
Write 4900360 bytes to socket:
- 11096 bytes written to socket
error while writing to socket
btw. la valeur de retour de fwrite
est 0
et non false
.
Est-ce que quelqu'un a une idée de ce qui pourrait être le problème? Merci beaucoup pour vos réponses
Je reçois les avis suivants lors du retrait du @ devant la fwrite:
Notice: fwrite(): send of 8192 bytes failed with errno=104 Connection reset by peer in /root/test.php on line 10
Notice: fwrite(): send of 8192 bytes failed with errno=32 Broken pipe in /root/test.php on line 10
Je viens renifla le flux TCP et je compris, que je reçois un
HTTP/1.1 413 Request Entity Too Large
Y at-il une solution à ce problème? J'utilise un lighttpd/1.4.22 serveur
supprimer le @ avant fwrite, il imprimera presque sûrement l'avertissement avec les détails pertinents. – nothrow
fwrite ne génère aucun avertissement. la valeur retournée est 0 et non fausse, ce qui signifie que la commande n'a pas échoué mais n'a pas écrit d'octets (selon la documentation) –
Je place maintenant error_reporting (E_ALL) devant mon code, et j'obtiens les notifications suivantes: Remarque: fwrite(): l'envoi de 8192 octets a échoué avec errno = 104 Connexion réinitialisée par l'homologue dans /root/test.php sur la ligne 10 Remarque: fwrite(): l'envoi de 8192 octets a échoué avec errno = 32 Broken pipe dans /root/test.php sur la ligne 10 Im heureux pour toutes les traductions :) ... mais pourquoi la valeur de retour de fwrite n'est pas fausse? –