8791 sujets

Développement web côté serveur, CMS

Bonjour, j'aimerais savoir s'il existe un moyen d'uploader plusieurs fichiers.
Je m'explique:
- J'ai un input ou je colle le chemin du repertoire (ex: c:\photos\reveillon\)
- Un bouton envoyer

Lorsque je clique sur envoyer sa cherche toutes les images du répertoire (pas de sous répertoires) et les upload une par une sur le site.

Quelqu'un connait-il un moyen ??

Merci de votre aide.
AMHA c'est impossible, ca serait une direction sur le serveur oui mais pas en local sur ton pc
on ne peut pas vraiment faire ça en php. du moins je crois.

il est possible d'avoir plusieurs input file dans un formulaire.

mais jamais vu de lecture d'un repertoire. on pourrait imaginer le coder mais pb faut pouvoir lire des repertoires chez les gens.

et puis on ne peut pas remplir a la mano le value d'un input type=file . (voir un topic passé récemment où ça été dit).
En flash il y a moyen de faire un formulaire d'upload de fichier plus évolué qu'avec un simple <input type="file" />.

A ma connaissance on peux faire de la sélection multiple de fichier et limiter à certains types de fichiers (par exemple ne lister que les images).

Je ne sais pas si on peux faire la sélection d'un dossier comme tu le souhaite, mais tu peux essayer de chercher dans cette direction.
sinon..... c'est pas frais dans ma mémoire mais je crois qu'on peut faire du ftp via php. j'avais lu un article la dessus y a longtemps. peut-être une piste?

edit: bon ben non j'ai retrouvé l'article. mais pour upload y a pas il passait par input type=file....
Modifié par CPascal (10 Jun 2007 - 22:42)
Country a écrit :
En flash il y a moyen de faire un formulaire d'upload de fichier plus évolué qu'avec un simple <input type="file" />.


Connaitrais tu un site qui propose ce genre de solutions
Hello,

Bien sur c'est possible en PHP.

1 Récupérer le contenu d'un répertoire dans un tableau :

// On ouvre un pointeur vers le répertoire

$répertoire = "chemin_du_repertoire/";
$directory = opendir($répertoire);


// On met le chemin des fichiers dans un tableau

while ($fichier = readdir($directory)) {
	if ($fichier != ".." && $fichier !=".") {
		$liste_fichiers[] = $directory.$fichier;
	}
}
closedir($directory);


2 Ensuite il suffit de construire dynamiquement un formulaire contenant autant d'éléments "input type="file"" et de pré-remplir les champs avec les éléments du tableau $liste_fichiers[], sur le modèle suivant :

<form action="mon_script_de_traitement.php" method="post" enctype="multipart/form-data">
<input type="hidden" name="MAX_FILE_SIZE" value="xxxoctets" />
<? php
for ($index = 0 ; sizeof($liste_fichiers) ; $index++) {
echo ("<input type=\"file\" name=\"fichier_source[]\" value=$liste_fichiers[$index] size=\"la_taille_qui_va_bien\" /><br />");
}
?>

// Puis viennent les boutons : envoi, annulation...

</form>


Le tableau "fichier_source[]" est récupéré dans le tableau $FILES du script de traitement ; il contient la liste des chemins des fichiers à tranférer. On traite tout cela dans une boucle.

Voilà pour le principe. On peut agrémenter en filtrant les extensions, les types MIME, les tailles de fichiers...

Attention de bien sécuriser les "upload"... c'est sensible.

Cheers,

Jmm.
Modifié par Helios (13 Jun 2007 - 18:15)
Modérateur
Bonjour,

Helios, ton idée ne peut pas fonctionner.

Premièrement, les navigateurs ne permettent pas d'alimenter l'attribut value d'un input type file. Cela poserait un énorme problème de sécurité si l'on pouvait le faire. Il suffirait de mettre par défaut le chemin vers un fichier sensible de l'ordinateur du client, et soumettre le formulaire automatiquement via Javascript. Tout cela à l'insu du client.

Deuxièmement, le PHP s'exécute uniquement côté serveur. La lecture de ton répertoire via PHP serait donc, forcément, un répertoire sur le serveur et non sur la machine du client.
Modifié par Tony Monast (13 Jun 2007 - 21:46)