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 :
Quelqu'un aurait-il une idée ? Encore une fois, la mise à jour fonctionne... de temps en temps.
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é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); }
D'avance, merci !
Bonne journée
Partager