[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. Modérateur
      Ben ce sont des erreurs relatives à Pycron mais je ne pense pas que ça vienne de ta commande.

      Pour tester ta commande, essaie par exemple dans ton script php d'écrire dans un nouveau fichier (genre: c:\test.txt) depuis ce script, je ne vois pas d'autre moyen de savoir s'il s'execute.

      Et écris dans ce fichier au tout début de ton script, avant toute autre ligne de php.
      1. et maintenant il dit ca aussi, et non l'autre fichier de log est vide
        Traceback (most recent call last):
        File "editorDialog.pyo", line 349, in OnEditorFrameClose
        File "editorDialog.pyo", line 245, in showNotSavedDialog
        File "editorDialog.pyo", line 283, in OnFilemenuitems1Menu
        File "crontab.pyo", line 80, in saveFile
        File "crontab.pyo", line 27, in _readCronFile
        File "pycron.pyo", line 548, in __init__
        File "pycron.pyo", line 441, in __init__
        _csv.Error: newline inside string
        1. dans pyCronEditor.exe.log
          il y a
          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 0xe9 in position 31: ordinal not in range(128)


          Mais je ne sais pas ce que ca veut dire
          1. ca y est, mais il a ouvert le doc php avec mon éditeur de text mais ne l'a pas fait "tourner" mon mail test n'est pas parti

            la command
            D:/monchemin/send.php
            les paramétres
            /****
            1. Modérateur
              Représente toi comment fonctionne un langage interprété (php/perl/python etc....):

              Tu as un programme qui interprète le code: php.exe pour php, donc php.exe c'est l'interpréteur.

              Généralement pour lancer un fichier écris dans un langage interpété comme php, on appelle l'interpéteur et on lui passe le script à executer en paramètre. Comme ceci:
              php.exe un_fichier_php


              Donc le programme à lancer c'est Php et non pas ton script php.
              Grossièrement ta ligne de cron ça donnera:
              minute heure jour mois numero_du_jour  "C:\chemin_vers_php\php.exe" "c:\chemin_vers_fichier_php\ton_fichier.php"
              (le tout en une ligne)
            2. @kilianj'ai mis
              "C:\Program Files\EasyPHP1-8\php\php.exe" "D:\monchemin\send.php"

              et j'ai cliqué sur test execution et là ... rien
              rien, ne bouge, pas de mouvement en bd rien
            3. Modérateur
              @kilianTu as regardé dans les logs de pycron?
          2. Modérateur
            Voici un exemple donné sur la page
            http://www.bigbluehost.com/article4.html
            0 23 * * 4 “C:\WINDOWS\System32\defrag.exe” c:

            Il y a d'abord 5 paramètres pour la date d'execution.
            Ensuite il vaut mieux préférer mettre le chemin complet vers php.exe (et bien mettre php.exe et non pas php) et mettre ce chemin entre guillemets.
            Puis en paramètre (comme avec le c: au dessus à la fin) tu mets le nom du fichier php (mais il va falloir qu'il le trouve ce fichier php, donc il va falloir mettre le chemin complet et mettre ce chemin entres guillemets s'il y a un espace dedans.
            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. 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. 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. 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. 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 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. 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. 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. 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
                              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. 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
                                  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?
                                • 1
                                • 2