[PHP] Créer un multi-upload
Daqpo
-
bugs2010 -
bugs2010 -
Bonjour, j'ai un script simple pour héberger des fichier 1 par 1, mais j'aimerais créer un système de multi-upload pour aller plus vite mais je ne sais pas comment faire.
Je ne veux pas un script tout fait avec le multi-upload mais juste ce qu'il fait ajouté a mon code actuel.
Je pense qu'il faut utilisé une chaine PHP style for() mais je sais pas du tout comment faire, comment compté le nombre de fois il faut répété le code etc.... même coté HTML je sais pas comment faire.
Merci d'avance.
PS : Si vous voulez, je peux parler sur MSN pour arrivé a bout du problème plus rapidement que sur le forum.
Je ne veux pas un script tout fait avec le multi-upload mais juste ce qu'il fait ajouté a mon code actuel.
Je pense qu'il faut utilisé une chaine PHP style for() mais je sais pas du tout comment faire, comment compté le nombre de fois il faut répété le code etc.... même coté HTML je sais pas comment faire.
Merci d'avance.
PS : Si vous voulez, je peux parler sur MSN pour arrivé a bout du problème plus rapidement que sur le forum.
A voir également:
- [PHP] Créer un multi-upload
- Comment créer un groupe whatsapp - Guide
- Créer un compte google - Guide
- Créer un lien pour partager des photos - Guide
- Créer un compte gmail - Guide
- Creer un fichier .bat - Guide
24 réponses
Je me suis trompé dans mes explications.
En fait, la structure n'est pas
Pour me faire pardonner, je t'ai codé un exemple fonctionnel.
https://gist.github.com/anonymous/d3c4d9dc096a464c374e
Ton ordinateur ne fait pas ce que tu veux ... mais ce que tu lui dis de faire.
En fait, la structure n'est pas
$_FILES['fichiers'][0]['...'] $_FILES['fichiers'][1]['...'] $_FILES['fichiers'][2]['...'] ...Mais
$_FILES['fichiers']['...'][0] $_FILES['fichiers']['...'][1] $_FILES['fichiers']['...'][2] ...
Pour me faire pardonner, je t'ai codé un exemple fonctionnel.
https://gist.github.com/anonymous/d3c4d9dc096a464c374e
Ton ordinateur ne fait pas ce que tu veux ... mais ce que tu lui dis de faire.
Salut.
Pour la partie HTML, il faudra passer par du Javascript pour l'ajout dynamique de champs.
Pour le name de tes input (type="file"), il faudra mettre la même chose avec des crochets au bout.
Par exemple : name="fichiers[]".
Au niveau du PHP, il suffit de traiter les fichiers un par un avec une boucle foreach.
Pour la partie HTML, il faudra passer par du Javascript pour l'ajout dynamique de champs.
Pour le name de tes input (type="file"), il faudra mettre la même chose avec des crochets au bout.
Par exemple : name="fichiers[]".
Au niveau du PHP, il suffit de traiter les fichiers un par un avec une boucle foreach.
foreach($_FILES['fichiers'] as $fichier) {
/* Traitement du fichier.
* $fichier est un array contenant les données sur le fichier actuel :
* size, filename, ...
*/
}
D'accord, pour le traitement du fichier j'ai tout ce qu'il faut avec les if() de vérifications, par contre je comprend pas a partir d'ici :
* $fichier est un array contenant les données sur le fichier actuel :
* size, filename, ...
* $fichier est un array contenant les données sur le fichier actuel :
* size, filename, ...
Dans la boucle foreach, $fichier représente un fichier.
Tu peux donc accèder aux valeurs de $fichier['size'], $fichier['type'], $fichier['name'], $fichier['error'], $fichier['tmp_name'], ...
Tu peux donc accèder aux valeurs de $fichier['size'], $fichier['type'], $fichier['name'], $fichier['error'], $fichier['tmp_name'], ...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
D'accord mais foreach() permet de traité un array et non du HTML avec name="fichiers[]"...
name="fichiers[]" = Array php convertie en HTML ? Si oui :
Il faut pas plutôt faire ceci :
name="fichiers[0]"
name="fichiers[1]"
name="fichiers[2]"
name="fichiers[3]" ....
Merci d'avance.
name="fichiers[]" = Array php convertie en HTML ? Si oui :
Il faut pas plutôt faire ceci :
name="fichiers[0]"
name="fichiers[1]"
name="fichiers[2]"
name="fichiers[3]" ....
Merci d'avance.
$_FILES['fichiers'] sera un array.
Inutile de préciser des chiffres, ça se fera automatiquement.
D'ailleur, en PHP, tu peux même faire ça :
Inutile de préciser des chiffres, ça se fera automatiquement.
D'ailleur, en PHP, tu peux même faire ça :
<?php $array[] = 'Valeur 1'; $array[] = 'Valeur 2'; var_dump($array); ?>
D'accord et pour le dernier point de sécurité :
Je veux limité l'upload simultané à 5, si une personne crée une page en HTML il pourra en mètre en illimité, comment bloqué si c'est plus que 5 en PHP ?
Je veux limité l'upload simultané à 5, si une personne crée une page en HTML il pourra en mètre en illimité, comment bloqué si c'est plus que 5 en PHP ?
Re, désolé pour la remonté, mais encore une question :
Pour le traitement du fichier, avec les vérifications je doit plus utilisé ceci : if(filesize($_FILES[fichier]['tmp_name']) > $taille) mais ceci : if(filesize($fichier['tmp_name']) > $taille) ?
Et puis comment affiché le les lien tout en bas ?
Pour le traitement du fichier, avec les vérifications je doit plus utilisé ceci : if(filesize($_FILES[fichier]['tmp_name']) > $taille) mais ceci : if(filesize($fichier['tmp_name']) > $taille) ?
Et puis comment affiché le les lien tout en bas ?
Ok mais les lien vont s'afficher à la suite :
http://site.com/http://site.com/http://site.com/http://site.com/
Moi je souhaité faire une présentation :
Fichier 1 hébergé :
https://www.salesforce.com/products/platform/overview/
HTML
BBCode
Fichier 2 hébergé :
https://www.salesforce.com/products/platform/overview/
HTML
BBCode
.....
http://site.com/http://site.com/http://site.com/http://site.com/
Moi je souhaité faire une présentation :
Fichier 1 hébergé :
https://www.salesforce.com/products/platform/overview/
HTML
BBCode
Fichier 2 hébergé :
https://www.salesforce.com/products/platform/overview/
HTML
BBCode
.....
Tu as appris le PHP où ?!
$fichier est un array, tu ne peux pas l'afficher !
Puis si tu ne me donnes pas plus de détails comme le dossier dans lequel tu enregistres le fichier est le nom que tu lui donnes, j'aurais du mal à t'aider.
$fichier est un array, tu ne peux pas l'afficher !
Puis si tu ne me donnes pas plus de détails comme le dossier dans lequel tu enregistres le fichier est le nom que tu lui donnes, j'aurais du mal à t'aider.
Le dossier est /up/ a partir de la racine et le nom des fichiers héberger est renommé par un uniqid() + md5().
Dans la boucle foreach, stocke dans une variable ($url) l'url complète vers le fichier.
Après, il te suffit d'écrire le code HTML avec des echo (pense à utiliser les entités HTML).
Après, il te suffit d'écrire le code HTML avec des echo (pense à utiliser les entités HTML).
Je comprend pas trop, actuellement j'utilise ceci pour 1 seul fichier :
<?php
echo '<p><a href="'.$repertoire.$id.$extension.'" onclick="window.open(this.href); return false;">'.$repertoire.$id.$extension.'</a></p>'."\n";
?>
Et pour mes if(), j'utilise ceci :
if(filesize($_FILES[fichier]['tmp_name']) > $taille)
Si c'est un array, il faut que je mètre $fichier[] ?
Désoler mais je ne suis pas très fort en PHP, et la je suis vraiment perdu, merci pour ta patience.
<?php
echo '<p><a href="'.$repertoire.$id.$extension.'" onclick="window.open(this.href); return false;">'.$repertoire.$id.$extension.'</a></p>'."\n";
?>
Et pour mes if(), j'utilise ceci :
if(filesize($_FILES[fichier]['tmp_name']) > $taille)
Si c'est un array, il faut que je mètre $fichier[] ?
Désoler mais je ne suis pas très fort en PHP, et la je suis vraiment perdu, merci pour ta patience.
Déjà $_FILES[fichier] c'est invalide : il manque les guillemets et c'est "fichiers", avec un "s".
Comme je te l'ai déjà dis, $_FILES['fichiers'] est donc un array : on l'explore grâce à une boucle foreach.
À l'intérieur de la boucle, $fichier représente le fichier en cours de traitement. Toutes les opérations dans cette boucle sont répétées pour chaque fichier.
Donc dans tes conditions, c'est $fichier['tmp_name'], $fichier['size'], $fichier['error'], ... qu'il faut utiliser.
Pour afficher les codes HTML et BBCode, il suffit de faire de simples echo des codes, en pensant à remplacer les caractères <, > et " par leur équivalent HTML (amp, lt, gt).
Comme je te l'ai déjà dis, $_FILES['fichiers'] est donc un array : on l'explore grâce à une boucle foreach.
À l'intérieur de la boucle, $fichier représente le fichier en cours de traitement. Toutes les opérations dans cette boucle sont répétées pour chaque fichier.
Donc dans tes conditions, c'est $fichier['tmp_name'], $fichier['size'], $fichier['error'], ... qu'il faut utiliser.
Pour afficher les codes HTML et BBCode, il suffit de faire de simples echo des codes, en pensant à remplacer les caractères <, > et " par leur équivalent HTML (amp, lt, gt).
Re, j'ai testé avec un simple if() et cela ne fonctionne pas...
<input type="file" name="fichier[]" />
<?php
$nb = 0;
foreach($_FILES['fichier'] as $fichier) {
if($nb < 5) {
if(!preg_match("/image\//i", $fichier['type']))
echo '<p>Le fichier n\'est pas une image.</p>'."\n";
else {
echo 'OK';
}
$nb++;
}
}
?>
Résulta : Sa affiche 5 fois (a cause du if limité a 5) que le fichier est n'est pas une image, pourtant j'ai bien utiliser $fichier comme tu ma dit...
<input type="file" name="fichier[]" />
<?php
$nb = 0;
foreach($_FILES['fichier'] as $fichier) {
if($nb < 5) {
if(!preg_match("/image\//i", $fichier['type']))
echo '<p>Le fichier n\'est pas une image.</p>'."\n";
else {
echo 'OK';
}
$nb++;
}
}
?>
Résulta : Sa affiche 5 fois (a cause du if limité a 5) que le fichier est n'est pas une image, pourtant j'ai bien utiliser $fichier comme tu ma dit...
Donc coté HTML : name="fichiers[]"
Coté PHP : On utilise foreach() mais comment ? (Serrais t-il possible d'avoir une explication comme le tout premier message (malheureusement faux) ?)
Merci d'avance.
En partant de ça, on sait que si $_FILES['fichiers']['error'][0] existe, alors les autres données ($_FILES['fichiers']['name'][0], ...) existent aussi.
On stocke donc le numéro de l'entrée dans la variable $nb qui vaut 0 par défaut. À la fin de la boucle foreach, on l'incrémente de 1, de cette façon, au prochain "passage" dans la boucle, elle vaudra 1, puis 2, ainsi de suite. Avec cette variable $nb, nous pourrons donc récupérer les données (error, tmp_name, size, ...) de cette façon : $_FILES['fichiers']['donnee'][$nb]
$allowedTypes est un array contenant les types MIME autorisés. Je vérifie donc si $_FILES['fichiers']['type'][0] est dans cet array. À la place de cette vérification, j'aurais pu vérifier l'extension, mais cette vérification serait alors inutile : il ne faut pas faire confiance aux extensions.
Je pense avoir expliqué ce qui était nécessaire.