IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Erreur 500 AJAX (après X secondes)


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 59
    Par défaut Erreur 500 AJAX (après X secondes)
    Bonjour,

    Je rencontre un soucis sur lequel je bute depuis un moment, et je me demandais s'il y aurait une bonne âme pour m'éclairer.

    Un programme de mise à jour (fait maison), qui vient récupérer sur un serveur en local des informations (BDD + fichiers) pour les mettre à jour chez un client ne fonctionne pas comme je le souhaite... et je ne parviens pas à comprendre pourquoi.

    Deux fichiers :
    index.php, qui contient un tableau JavaScript avec un tableau d'actions, qui correspondent à chaque module du programme, et une boucle qui tourne, qui fait en sorte que dès que la requête ajax précédente est terminée, il exécute la suivante.
    index_ajax.php, le fichier appelé, qui contient des if / elseif avec le code pour la mise à jour de chaque module.

    Tout se passe bien... jusqu'à ce que le programme plante, avec un magnifique "internal server error 500" au bout de X secondes, en général autour de 32 secondes... mais trois fois sur cinq seulement. Et quand le programme fonctionne, la requête ajax en question met entre 1' et 1'10'' à s'exécuter (aucune exécution en dessous de 1 minute).
    J'ai bien pensé au max_execution_time, mais non, il est à 300 (je fais un ini_get juste au dessus pour m'en assurer).

    L'appel ajax qui plante est celui qui sert à transférer l'ensemble des programmes, un tar gz est construit, puis envoyé en FTP, comme indiqué sur le programme ci-dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    // On initialise les variables
    $remote_file = 'librairie.tar.gz';
    $local_file = '../../librairie.tar.gz';
    $cmd = 'cd ../..;gunzip librairie.tar.gz;tar xvf librairie.tar;rm librairie.tar';
     
    // Execution du tar sur le serveur distant
    echo '<pre>'.file_get_contents('***/tar_librairies.php').'</pre>';
    // Connexion au serveur	
    $conn_id = ftp_connect($ftp_server,21,300);
    // Identification avec un nom d'utilisateur et un mot de passe
    $login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
    // Activation du mode passif
    ftp_pasv($conn_id, true);
     
    // Vérification de la connexion
    if((!$conn_id) || (!$login_result)) {
    	echo 'Tentative de connexion ECHOUEE au serveur '.$ftp_server.' pour \'utilisateur '.$ftp_user_name;
    }
    else {
    	echo 'Connexion FTP r&eacute;ussie sur le serveur<br /><br />';
     
    	// Chargement d'un fichier
    	try {
    		$load_source = ftp_get($conn_id,$local_file,$remote_file, FTP_BINARY); 
    		if($load_source === FALSE)
    			throw new Exception('Erreur FTP GET : '.$load_source);
     
    		$output = shell_exec($cmd);
    		if($output == '' || $output === FALSE)
    			throw new Exception('Erreur Shell : '.$output);
    		echo '<pre>EXTRACTION DE LA LIBRAIRIE TAR :'.$output.'</pre>';
    	}
    	catch(Exception $e) {
    		echo $e->getMessage();
    	}
    	// On referme la connexion
    	ftp_close($conn_id);
    }
    Quelqu'un aurait-il une idée ? Encore une fois, la mise à jour fonctionne... de temps en temps.

    D'avance, merci !
    Bonne journée

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Erreur 500 est un retour générique pour une erreur.
    Il faut que tu consultes tes logs PHP et Apache pour connaitre l'erreur.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 59
    Par défaut
    Bonjour,

    Merci pour ce début de réponse.
    Le log PHP renvoie ceci :

    [Fri Oct 04 09:23:52 2013] [notice] mod_fcgid: process **/index_ajax.php(28308) exit(communication error), terminated by calling exit(), return code: 0

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Tu peux aussi faire des recherches par toi même sur cette erreur.

    Dans les logs PHP tu as quelque chose ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 59
    Par défaut
    C'était en cours, j'ai répondu au topic pour voir si quelqu'un trouvait plus rapidement que moi.

    J'ai une piste :
    Il faut modifier la configuration dans le fichier /etc/apache2/mods-enabled/fcgid_ispcp.conf, pour augmenter le temps (20 secondes par défaut chez moi)

    J'ai augmenté le temps à 300 secondes (vu la taille des fichiers sur lesquels je travaille) et... ça fonctionne ! Je fais encore quelques tests pour conclure à la résolution du problème. Merci pour la piste des logs !

  6. #6
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 323
    Par défaut
    bonjour,

    je note :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if($output == '' || $output === FALSE)
    en cas d'erreur shell_exec retourne null et pas false !

    donc a mon avis vous ne traitez pas ces erreurs.

  7. #7
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 59
    Par défaut
    Re-bonjour,

    A noter que je fais un triple égal, ce qui devrait quand même lui permettre de traiter l'erreur ?

    A priori, je me suis réjoui un peu vite, j'ai eu deux mises à jour qui sont passées à la suite alors que j'utilisais la bande passante à côté (dans le cadre du test), et là plus rien de nouveau.

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Papajoker veut justement dire qu'il n'y a pas de retour FALSE.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 323
    Par défaut
    Citation Envoyé par Harold_le_Rouge Voir le message

    A noter que je fais un triple égal, ce qui devrait quand même lui permettre de traiter l'erreur ?

    .
    au contraire
    === signifie $output est strictement égal a false
    et false n'est pas strictement égal a null !!

    mais bon pas ça qui résout l'erreur

    edit:
    perso dans ce genre de script je me fais un log perso pour debug en cas de probleme
    time, taille fichier , action...


  10. #10
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Par contre '' == FALSE == NULL.
    Ta première condition capte donc le cas NULL.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  11. #11
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 59
    Par défaut
    Re-bonjour,

    Je vous ai épargné l'étape de débug, mais il y a des fwrite qui traine après chaque ligne, il s'avère que la première chose qui plante - parfois - est la commande ftp_get, qui doit mettre plus de 30 secondes.

    Depuis la modification du paramètre indiqué ci-dessus, je n'ai plus d'erreur 500, il me dit 200 OK (merci firebug), il plante quand même à 33 secondes et des bananes.

    Il semblerait que j'avais une erreur dans mon test au niveau de $load_source, un simple == doit suffire.

  12. #12
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 59
    Par défaut
    Bonjour,

    Je reviens vers vous car ce n'est pas encore (malheureusement) résolu.

    Je penche vers un soucis au moment du file_get_content (qui exécute une commande) ou du transfert en ftp... j'ai constaté que lorsqu'on écoutait une radio en ligne au boulot (et qui donc occupe la ligne), ça plantait plus régulièrement.

    Quelqu'un aurait-il une idée ?

  13. #13
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    A noter que je fais un triple égal
    Ben justement !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    echo null === false ? 'oui' : 'non'; // non
    echo null == false ? 'oui' : 'non'; // oui
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AJAX] Erreur 500 Ajax+php upload file sur serveur ubuntu
    Par Jordan-Tess dans le forum jQuery
    Réponses: 0
    Dernier message: 02/12/2014, 11h23
  2. [AJAX] Erreur 500 Ajax - Post
    Par JayZon12 dans le forum AJAX
    Réponses: 3
    Dernier message: 31/08/2013, 13h36
  3. [Web Services] Erreur 500 après quelques temps
    Par Pill_S dans le forum Spring
    Réponses: 2
    Dernier message: 03/05/2010, 09h58
  4. [MySQL] Après modification d'un nom, j'ai "Erreur 500 : Erreur interne du serveur"
    Par swampsnake dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 09/05/2009, 09h08
  5. Réponses: 1
    Dernier message: 11/02/2008, 10h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo