PHP : Move_uploaded_file() [Résolu/Fermé]

Signaler
Messages postés
83
Date d'inscription
vendredi 12 mars 2004
Statut
Membre
Dernière intervention
31 mars 2017
-
 wewes2013 -
Bonjour,

J'essaye de paramétrer un script pour un upload multiple de fichiers. J'aimerais utiliser celui-là : https://olance.developpez.com/articles/web/javascript/multiupload/ que je trouve très esthétique et très pratique.

Seul problème, je n'arrive pas uploader les fichiers ... je me suis aidé de cet article : https://forums.commentcamarche.net/forum/affich-4231288-move-uploaded-file-php, mais je n'arrive toujours pas à trouver la bonne syntaxe, car la fonction Move_uploaded_file() me renvoie toujours FALSE.

Voici ma page en php :

$dossier = '/fichiers/';
foreach($_FILES as $fichier)
{
if(move_uploaded_file($fichier['name'], $dossier.$fichier['name']))
{
echo 'Upload effectué avec succès pour le fichier '.$fichier['name'] '. "<br/>";
}
else
{
echo 'Echec de l\'upload. '. "<br/><br/>";
}
}

Merci de m'indiquer quoi faire, j'ai essayé de multiples syntaxes mais je n'arrive jamais à uploader de fichiers...

Cordialement,

Jonas001

45 réponses

Messages postés
83
Date d'inscription
vendredi 12 mars 2004
Statut
Membre
Dernière intervention
31 mars 2017
9
Tout est là, tu dois juste réassembler les morceaux.

Perso j'ai fait une frame dans la page que les gens visionnent. Cette frame s'appelle index.html qui la page index.html présent dans l'archive.

Cette page index.html effectue un envoi en post pour la page upload.php, dont le code est :

<?php

foreach($_FILES as $fichier)
{

$dossier =$_SERVER['DOCUMENT_ROOT']. '/html/upload/fichiers/';
$fich=$fichier['name'];

if(move_uploaded_file($fichier['tmp_name'],$dossier . $fich))
{
echo 'Upload effectué avec succès pour le fichier '.$fichier['name'] . "<br/>";
}
else
{
echo '<font color="red">Echec de l\'upload pour le fichier <f/ont>'.$fichier['name']. "<br/><br/>";
}
}

?>

Pense donc à modifier avec ton propre chemin la partie /html/upload/fichiers/' , c'est tout ce que tu as à faire.

Après ce script est joli mais peu efficace, c'est dur d'uploader plus de 2 ou 3 photos de 400ko, donc c'est pas la joie je trouve
6
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 60511 internautes nous ont dit merci ce mois-ci

Bonjour

Si j'en crois ton move_uploaded_file, tu essayes de recopier le fichier téléchargé vers /fichiers/nomdufichier.ext.
Mais attention, il s'agit ici d'un nom dans le système de fichiers du serveur, pas par rapport à la racine de ton site !
Si ton site est installé dans le répertoire (exemple bidon) /usr/sitedejonas/, tu dois sauvegarder ton fichier comme /usr/sitedejonas/fichiers/nomdufichier.ext et non pas simplement /fichiers/nomdufichier.ext.

En PHP, une variable te donne le répertoire de la racine de ton site : $_SERVER['DOCUMENT_ROOT'].

Il faut donc faire $dossier =$_SERVER['DOCUMENT_ROOT. '/fichiers/'; pour avoir le bon nom de dossier. (et vérifier s'il faut bien un '/' au début de '/fichiers/', je ne sais plus s'il y en a un ou non à la fin du document_root)
Merci de votre aide.
Messages postés
32
Date d'inscription
jeudi 19 juin 2008
Statut
Membre
Dernière intervention
23 décembre 2009
16
Bonjour,

Jonas, comment as-tu fait exactement ? j'ai téléchargé la même source que toi ( à savoir sur https://olance.developpez.com/articles/web/javascript/multiupload/ ), je n'ai rien touché aux fichiers car je n'y connais rien au javascript...
Pour le fichier upload.php, j'ai juste mis pour le répertoire : "/uploads/", car l'architecture de mon dossier se présente ainsi :

-dossier images
-dossier js
-dossier uploads
-index.html
-multiupload.js
-style.css
-upload.php

J'suis en galère, aidez-moi s'il vous plait :-( :-( :-(
Messages postés
575
Date d'inscription
vendredi 24 octobre 2008
Statut
Membre
Dernière intervention
1 juin 2010
16
le nombrede fichiers que tu vas uploader stp !!!
Messages postés
32
Date d'inscription
jeudi 19 juin 2008
Statut
Membre
Dernière intervention
23 décembre 2009
16
Le chemin de quoi ?
Messages postés
83
Date d'inscription
vendredi 12 mars 2004
Statut
Membre
Dernière intervention
31 mars 2017
9
Salut, merci pour ta réponse, mon erreur provenait de là entre autres ... J'ai fait aussi d'autres modifs comme le ['tmp_name'], et désormais ça marche ! Voici le code pour ceux que ça intéresse. YEPEE !

Voici ma nouvelle page :

foreach($_FILES as $fichier)
{
$dossier =$_SERVER['DOCUMENT_ROOT']. '/fichiers/';
$fich=$fichier['name'];

if(move_uploaded_file($fichier['name']['tmp_name'],$dossier . $fich))
{
echo 'Upload effectué avec succès pour le fichier '.$fichier['name'] . "<br/>";
}
else
{
echo 'Echec de l\'upload. '. "<br/><br/>";
}

}
Messages postés
32
Date d'inscription
jeudi 19 juin 2008
Statut
Membre
Dernière intervention
23 décembre 2009
16
arf... Et tu n'en connaitrais pas un qui fonctionne un peu mieux mais avec une ergonomie pas mal comme ce script là ?
Messages postés
575
Date d'inscription
vendredi 24 octobre 2008
Statut
Membre
Dernière intervention
1 juin 2010
16
Une question, est ce que tu as perl activé sur ton serveur ?
Car la majorité des serveurs son limités a 2Mo d'upload et ceci te limite bcp.
Si tu me confirmes que prel fonctionne sur ton serveur, l'upload en ajax sera possible et on pourras l'adapter pour ton cas même en upload multiple.

Bon travail
Messages postés
32
Date d'inscription
jeudi 19 juin 2008
Statut
Membre
Dernière intervention
23 décembre 2009
16
Le quuuuooiii ? ^^ Je ne sais pas du tout, ce que je peux te dire c'est que je suis chez free... tu veux que je fasse un phpinfo ?
Messages postés
32
Date d'inscription
jeudi 19 juin 2008
Statut
Membre
Dernière intervention
23 décembre 2009
16
Avec phpinfo();, j'obtiens ceci:
PCRE (Perl Compatible Regular Expressions) Support enabled
Messages postés
575
Date d'inscription
vendredi 24 octobre 2008
Statut
Membre
Dernière intervention
1 juin 2010
16
Non ça va, chez free y a pas de perl
Bon pour le code d'upload, tu fais la boucle freoach comme indiqué qui va parcourir tous les objets $_FILES, tu veux un code complet et simple ?
Messages postés
32
Date d'inscription
jeudi 19 juin 2008
Statut
Membre
Dernière intervention
23 décembre 2009
16
Bah ce que je veux, c'est le formulaire dont je parle, mais qui marche avec mon serveur...
Messages postés
575
Date d'inscription
vendredi 24 octobre 2008
Statut
Membre
Dernière intervention
1 juin 2010
16
Je vois donc que perl fonctionne, est ce que tu as le chemin ?
Messages postés
575
Date d'inscription
vendredi 24 octobre 2008
Statut
Membre
Dernière intervention
1 juin 2010
16
Le chemin de perl
Messages postés
575
Date d'inscription
vendredi 24 octobre 2008
Statut
Membre
Dernière intervention
1 juin 2010
16
Voila un code qui fonctionne pour un upload d'un seul fichier

//*****************************
if(isset($_POST['uploader'])){
$content_dir = $nom_repertoire; // dossier où sera déplacé le fichier
$tmp_file = $_FILES['file']['tmp_name'];
if( !is_uploaded_file($tmp_file))
{ echo"File not found";
}else {
// on vérifie maintenant l'extension
$type_file = $_FILES['file']['type'];
if( !strstr($type_file, 'jpeg'))
{ echo"Incompatible file type";
} else {
if( strstr($type_file, 'jpeg')) { $typefichier = ".jpg";}
// on copie le fichier dans le dossier de destination
$name_file = "Fichier".$typefichier;/*$_FILES['fichier']['name'];*/
if( !move_uploaded_file($tmp_file, $content_dir.$name_file) )
{ echo"File upload failed";
} else {
}}}}
Messages postés
32
Date d'inscription
jeudi 19 juin 2008
Statut
Membre
Dernière intervention
23 décembre 2009
16
merci pour ton code, mais comme je veux uploader une vingtaines de photos, je ne veux pas mettre 20 champs type files... D'où l'intéret de ce script en javascript...
Messages postés
32
Date d'inscription
jeudi 19 juin 2008
Statut
Membre
Dernière intervention
23 décembre 2009
16
Le problème ne viendrait pas d'un CHMOD, interdit chez free?
Messages postés
575
Date d'inscription
vendredi 24 octobre 2008
Statut
Membre
Dernière intervention
1 juin 2010
16
Ce n'est pas la peine d'utiliser le js pour ça, php a la possibilité de créer a l'aide d'une boucle 20 input de type file:

for ($i=0; $i<20; $i++){
echo "<input type=\"file\" name=\"fichier_$i\"><br />";
}

La même boucle te seras utile pour le script de l'upload
Messages postés
32
Date d'inscription
jeudi 19 juin 2008
Statut
Membre
Dernière intervention
23 décembre 2009
16
oulahlahlah j'y comprend rien... t'aurais pas un exemple de script complet comme ca ?
Messages postés
575
Date d'inscription
vendredi 24 octobre 2008
Statut
Membre
Dernière intervention
1 juin 2010
16
Essaies d'inserer ce code dans ta page php et tu vas voir qu'elle vas te construire une vingtaine de types file

<?php
for ($i=0; $i<20; $i++){
echo "Fichier $i: <input type=\"file\" name=\"fichier_$i\"><br />";
}
?>