Bonjour à tous,
J'ai créé une application web qui permet à un administrateur d'ajouter un ou plusieurs fichiers audio à un compte client via plusieurs formulaires qui se succèdent sur 3 pages, en 3 étapes différentes donc. Cette application tourne avec PHP 7.1 sur un serveur mutualisé. Il n'y a rien de bien compliqué dans son fonctionnement :
- La page 1 permet de rechercher et sélectionner un compte client parmi ceux existants.
- La page 2 permet de nommer le dossier, d'y ajouter une description et de sélectionner un ou plusieurs fichiers audio sur l'ordinateur de l'administrateur puis de les télécharger et d'enregistrer tout ça en BDD.
- La page 3 permet ensuite de renommer le(s) fichier(s) audio précédemment téléchargés si besoin.
Mon problème se situe au niveau de la deuxième page, lorsque j'essaie de télécharger un fichier de 69Mo via le formulaire. Mon script est d'abord un enchainement de conditions qui testent si les champs sont bien renseignés, si les variables ont bien étés initialisées, si le nom n'est pas trop long, etc... bref, la routine
Mis à part avec ce fichier audio de 69Mo, mon application fonctionne correctement avec tous les autres fichiers de taille inférieure.
Si toutes les conditions en amont sont vraies, alors on peut enfin télécharger le(s) fichier(s), les renommer et enregistrer le tout en BDD puis on redirigera l'utilisateur à l'étape suivante. Je vous passe toutes les conditions qui précèdent et vous fourni que l'essentiel du code si ça peut aider, à savoir la boucle de téléchargement multi-fichiers :
Lorsque je sélectionne ce fichier de 69Mo au format .wav (qui sont bien plus volumineux que les .mp3), mon script tourne pendant 10-15 secondes à peine et la page actuelle se ré-actualise. Du coup, on perd toutes les infos qui proviennent de la page 1 mais PHP ne m'affiche aucune erreur de son côté...
Je suis allé jeter un coup d'oeil dans les logs du côté du serveur, et j'ai cette ligne qui s'inscrit lorsque ce problème se produit :
Quelqu'un peut-il m'aider à interpréter cette erreur ? J'ai d'abord essayé de modifier les directives internes du php.ini en début de script (max_execution_time, max_input_time, post_max_size) mais comme je le pensais, ça n'a eu aucun effet, l'hébergeur ne permettant certainement pas de modifier ces valeurs.
Actuellement, mon hébergeur à mis Max_execution_time à 40, max_input_time à 40 également et post_max_size à 50M.
Je recherche donc une solution pour soit :
- permettre à l'utilisateur de pouvoir télécharger des fichiers plus volumineux, si c'est possible évidement (peu probable à mon avis)
- le cas échéant pouvoir au moins gérer cette erreur correctement, mais vu qu'elle provoque un rechargement de la page c'est plus délicat...
Il me semble que 69Mo, c'est pas tant volumineux que ça non ?
Je remercie d'avance toutes les âmes charitables qui voudront bien m'aider et me mettre sur une piste pour diagnostiquer et gérer cette erreur convenablement
S'il manque quoi que ce soit comme informations, n'hésitez pas à me le dire.
Loraga
J'ai créé une application web qui permet à un administrateur d'ajouter un ou plusieurs fichiers audio à un compte client via plusieurs formulaires qui se succèdent sur 3 pages, en 3 étapes différentes donc. Cette application tourne avec PHP 7.1 sur un serveur mutualisé. Il n'y a rien de bien compliqué dans son fonctionnement :
- La page 1 permet de rechercher et sélectionner un compte client parmi ceux existants.
- La page 2 permet de nommer le dossier, d'y ajouter une description et de sélectionner un ou plusieurs fichiers audio sur l'ordinateur de l'administrateur puis de les télécharger et d'enregistrer tout ça en BDD.
- La page 3 permet ensuite de renommer le(s) fichier(s) audio précédemment téléchargés si besoin.
Mon problème se situe au niveau de la deuxième page, lorsque j'essaie de télécharger un fichier de 69Mo via le formulaire. Mon script est d'abord un enchainement de conditions qui testent si les champs sont bien renseignés, si les variables ont bien étés initialisées, si le nom n'est pas trop long, etc... bref, la routine
Mis à part avec ce fichier audio de 69Mo, mon application fonctionne correctement avec tous les autres fichiers de taille inférieure.
Si toutes les conditions en amont sont vraies, alors on peut enfin télécharger le(s) fichier(s), les renommer et enregistrer le tout en BDD puis on redirigera l'utilisateur à l'étape suivante. Je vous passe toutes les conditions qui précèdent et vous fourni que l'essentiel du code si ça peut aider, à savoir la boucle de téléchargement multi-fichiers :
# Boucle de téléchargement multi-fichiers :
for($i=0; $i<count($_FILES['fichiers']['name']); $i++)
{
# On traite les fichier un par un :
# On vérifie le nom :
if(strlen($_FILES['fichiers']['name'][$i])<=4) {
$error = 'Veuillez donner un nom à votre fichier.';
}
# On vérifie les erreurs
if($_FILES['fichiers']['error'][$i] !=0){
$error = 'Le fichier N°'.$i.' contient des erreurs : téléchargement annulé.' ;
}
# Puis on déplace le fichier $i sur le serveur et on le renomme :
if(move_uploaded_file($_FILES['fichiers']['tmp_name'][$i], "../uploads/".$nomFichier)) {
# Insertion dans la BDD :
$ajouterfichier = $bdd->prepare('INSERT INTO fichiers_audio(nom, description, chemin, nom_fichier, droits) VALUES(?, ?, ?, ?, ?)');
$ajouterfichier->execute(array($nom, $description, $nom."-".$_FILES['fichiers']['name'][$i], $nom."-".$_FILES['fichiers']['name'][$i], $id));
# Quand la boucle se termine : succès ; on redirige l'utilisateur vers l'étape suivante :
if ($i<count($_FILES['fichiers']['name'])) {
header('Location:ajouter-fichiers-3.php?success=1');
}
}
else {
$error = 'Erreur : un problème est survenu lors du téléchargement du fichier.' ;
}
}
Lorsque je sélectionne ce fichier de 69Mo au format .wav (qui sont bien plus volumineux que les .mp3), mon script tourne pendant 10-15 secondes à peine et la page actuelle se ré-actualise. Du coup, on perd toutes les infos qui proviennent de la page 1 mais PHP ne m'affiche aucune erreur de son côté...
Je suis allé jeter un coup d'oeil dans les logs du côté du serveur, et j'ai cette ligne qui s'inscrit lorsque ce problème se produit :
[#Nom du serveur][Thu Apr 04 14:47:29.753023 2019] [cgi:error] [pid 120664] (70008)Partial results are valid but processing is incomplete: [client (#adresse IP)] AH01225: Error reading request entity data, referer: (#URL de la page concernée, la page 2 de mon script)
Quelqu'un peut-il m'aider à interpréter cette erreur ? J'ai d'abord essayé de modifier les directives internes du php.ini en début de script (max_execution_time, max_input_time, post_max_size) mais comme je le pensais, ça n'a eu aucun effet, l'hébergeur ne permettant certainement pas de modifier ces valeurs.
Actuellement, mon hébergeur à mis Max_execution_time à 40, max_input_time à 40 également et post_max_size à 50M.
Je recherche donc une solution pour soit :
- permettre à l'utilisateur de pouvoir télécharger des fichiers plus volumineux, si c'est possible évidement (peu probable à mon avis)
- le cas échéant pouvoir au moins gérer cette erreur correctement, mais vu qu'elle provoque un rechargement de la page c'est plus délicat...
Il me semble que 69Mo, c'est pas tant volumineux que ça non ?
Je remercie d'avance toutes les âmes charitables qui voudront bien m'aider et me mettre sur une piste pour diagnostiquer et gérer cette erreur convenablement
S'il manque quoi que ce soit comme informations, n'hésitez pas à me le dire.
Loraga