[PhP:Error]Notice: fwrite(): send of 16 bytes

Bonjour,

J'ai fait une application web en PhP.
Malheureusement au cour d'un script elle renvoie ceci
Notice: fwrite(): send of 16 bytes failed with errno=0 Une connexion existante a dû être fermée par l'hôte distant. in C:\PROGRA~1\EASYPH~1\php\pear\Net\Socket.php on line 258


Alors
1- Je ne sais pas ce que ca veux dire
2- Je ne sais pas a quoi serve les sockets, donc je ne pense pas y avoir touché.

Le script qui renvoie ca envoie des mail .... pour info
Et aprés l'erreur il continue de tourner !!
--
..:::P@ ... a tras, a PoOf ou a chou :::..

26 réponses

Résumé de la discussion

Le sujet porte sur une erreur PHP liée à fwrite et à une connexion socket: "Notice: fwrite(): send of 16 bytes failed with errno=0" indiquant qu'une connexion distante a été fermée. Plusieurs participants proposent des pistes techniques et pratiques: vérifier le fonctionnement des sockets, tester le script en écrivant dans un fichier de test, et envisager une exécution planifiée des envois via cron ou PyCron. D'autres échanges recommandent de répartir les envois d'emails et de rappeler que PHP s'exécute via un interpréteur, en montrant l'utilisation d'un lanceur de script en ligne de commande et des options Windows ou Unix.

Bobot (l’IA à votre service)
  1. mais on ne peut pas automatiser ??

    genre, si je lance l'action 1 à 10h alors il lancera tout seul l'action 2 à 18h ...
    1. Ben c'est dans un des doc de PEAR a priori ...
      dans ce doc il est écrit
          /**
           * Write a specified amount of data.
           *
           * @access public
           * @return mixed true on success or an error object otherwise
           */
          function write($data) {
              if (is_resource($this->fp)) {
                  return fwrite($this->fp, $data);
              }
              return $this->raiseError("not connected");
          }
      


      et moi je l'utilise l'or d'envoie de mail avec mail_queue de pear .
      Qui fonctionne trés bien, mais comme mes mails sont lourd (pdf en piece jointe) ...
      Je ne sais pas pourquoi ca fait ca :C

      1. Modérateur
        Ok.

        Et mail_queue() ça stocke les mail ou? Dans une base de données ou des fichiers?
        Faudrait voir à quelle occasion sert cette fonction write finalement.
        1. dans un premier temps l'erreur apparaissait parce que je ne lui donnais pas le bon nombre d'item et maintenant parce qu'il n'as pas assez de temps pour tourner !!
          1. Modérateur
            Salut,

            Tu entends quoi par item?
            Et qu'est ce qui n'a pas assez de temps pour tounrer (et qui l'en empêche?).

            Je manque de précision :-)
          2. @kilianvoilà ...
            Dans Mail_Queue pour envoyer les mails je fait
                    $nombre_max_de_mails = $R1;
                    $file_denvoi_de_mail =& new Mail_Queue($db_options, $mail_options);
                    $file_denvoi_de_mail->sendMailsInQueue($nombre_max_de_mails);
            

            Mais $R1 représentait le nombre de mail de 0 à n et non de 1 à n donc le total n'était pas le même
            Pour faire tourner la classe avec tous mes messages il me faut au moins 7h !!!
            Car plus il y a de message a envoyé plus ca prend de temps et plus les messages sont lourd plus c'est long !!!
            et c'est pour ca que ca me géne ... normalement le max_execution_time est à 30 seconde et pour bien faire il faut que je l'augmente considéréablement.
          3. Modérateur
            @kilianQu'est ce qui prend du temps?
            Mettre les mail en file d'attente ou bien les envoyer au final?
        2. les envoyer au final, c'est dans cette phase qu'il me fait parfois l'erreur.
          Je l'ai fait tournée une bonne partie de la nuit dernière sans aucune erreur, mais hier aprés midi il m'a refait l'erreur !!!
          1. Modérateur
            Et pourqui tu n'envoies pas les mails plus régulièrement?
            1. c'est à dire ??
            2. Modérateur
              Ben au lieu de totu envoyer d'un coup la nuit, pourquoi ne pas en envoyer la moitié à midi et l'autre à minuit?
          2. oui mais comment le faire automatiquement ??
            moi, je le lance en cliquant sur le bouton mais je préfére ne pas avoir a cliquer 2 fois.
            1. Modérateur
              Tu le lances depuis une page web?
              Tu peux probablement le lancer en ligne de commande au lieu de passer par une page web (php fonctionne aussi en ligne de commande).

              En fait ça dépend, tu lances cette page depuis la machine ou elle est hebergée?
              1. j'ai easyphp dans ma variable PATH

                tu pourrais m'en dire plus sur le php en ligne de commande stp.
                Parceque je n'ai aucune idée de comment ca marche et ce que je peux faire
                1. Modérateur
                  Si easyphp est dans ton path, alors j'espère que son repertoire php est aussi dedans.

                  A vrai dire c'est simple d'utilisation:
                  Tu ouvres une fenêtre dos, tu va dans le repertoire ou se trouve ton fichier php (par la biais de la comande cd) puis quand tu y es, tu tapes:

                  php nom_du_fichier.php
                  1. Modérateur
                    Hé si justement: grâce à la ligne de commande .

                    Sur les sytèmes UNIX tu as un logiciel appelé crontab qui te permet de lancer des lignes de commandes à l'heure et au jour que tu veux.
                    Sous windows il existe des logiciels qui font la même chose comme pycron:
                    http://www.kalab.com/freeware/pycron/pycron.htm
                    1. je suis entrain d'essayer.
                      J'ai hâte de voire le résultat :D
                  2. j'ai télécharger pycron,
                    je lui ai demander de lancer le ficher
                    et rien ne se passe .......

                    j'ai mis
                    command le chemin vers mon *.php
                    Minute 17
                    hour 12
                    Day of Month 15
                    Month 3
                    ...
                    et rien n'apparait, comment vérifier si action il y a ??
                    1. quand je fais comme tu as dis depuis les commandes dos
                      php ficher.php

                      alors il me répond
                      'php' n'est pas reconnu en tant que commande interne
                      ou externe, un programme exécutable ou un fichier de commandes.
                      1. j'ai trouvé ca dans le ficher de log

                        Traceback (most recent call last):
                          File "taskDialog.pyo", line 235, in OnTestexecbuttonButton
                          File "pycron.pyo", line 112, in __init__
                        UnicodeDecodeError: 'ascii' codec can't decode byte 0xe8 in position 15: ordinal not in range(128)
                        
                        1. Modérateur
                          'php' n'est pas reconnu en tant que commande interne
                          ou externe, un programme exécutable ou un fichier de commandes.


                          Comme je te l'ai dis, il faut que le chemin vers php.exe soit inclus dans ta variable PATH.

                          php.exe devrait être situé dans un endroit qui ressemble à ça:
                          c:\Program Files\EasyPhp\php\bin
                          1. en effet, j'avais mis sur php.exe et non le répertoire concerné !!!
                            Bon, maintenant c'est fait mais j'ai une erreure dans une alerte WARNING
                            Unknown(): Unable to load dynamic library './php_cpdf.dll' - Le module spécifié est introuvalbe
                            C'est quoi ce fichier, il sert a quoi ?
                            Où je peut le trouver et où dois je le mettre pour qu'il soit trouvé ??

                            Mais il execute tout de même le fichier
                            merci pour ton aide

                            1. je crois que j'ai un souci pour écrire la commande avec pycron
                              j'ai fait : D:\monchemin>php send.php
                              D:\monchemin php send.php
                              php D:\monchemin\send.php
                              et rien ne se passe !!
                              Ca marche comment ??
                              parce que sous "dos" ca marche
                              • 1
                              • 2