MULTI-UPLOAD FACILE AVEC JQUERY ET UN PEU DE PHP

malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 - 7 nov. 2007 à 19:59
salenson Messages postés 1 Date d'inscription mardi 22 août 2006 Statut Membre Dernière intervention 11 juin 2010 - 11 juin 2010 à 12:22
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/44633-multi-upload-facile-avec-jquery-et-un-peu-de-php

salenson Messages postés 1 Date d'inscription mardi 22 août 2006 Statut Membre Dernière intervention 11 juin 2010
11 juin 2010 à 12:22
Oui, on peut faire bien plus simple avec les mêmes résultats :

Le formulaire :
<form action="traitement.php" method="post" enctype="multipart/form-data" >

</form>

Le traitement :
<?php
# ################################## #
# Traitement des fichiers à uploader #
# ################################## #

// Définition de la classe PHP5
class Fichier
{
// Détecter l'extension et afficher cette extension
public function recupererExtension($fichier)
{
$extensions = array('jpg', 'JPG' , 'jpeg', 'JPEG','png','PNG','gif','GIF','bmp','BMP');
$ext = preg_replace('/.*\.([^\.]*)/', '$1', $fichier);
return in_array($ext, $extensions) ? $ext : false;
}

// Copier le fichier dans le dossier cible
public function copierFichier($fichier,$destination)
{
return (copy($fichier,$destination));
}
}

# Créer le dossier où seront uploadés les fichiers
if (is_dir("uploads") == FALSE) mkdir("uploads");

// Le premier fichier
$monFichier = new Fichier;
for ($i=0;$i<=9;$i++)
{
$finFile = $i?$i:"";
// Tester l'extension pour continuer
$monExtension = $monFichier->recupererExtension($_FILES['uploadedfile'.$finFile]['name']);
//echo "
Ext($finFile) = $monExtension \n";
if ($monExtension)
{
// -> Définir le chemin/destination du fichier uploadé
$target_path = "uploads/".basename($_FILES['uploadedfile'.$finFile]['name']);
// -> Uploader et enregistrer le fichier
if ($monFichier->copierFichier($_FILES['uploadedfile'.$finFile]['tmp_name'],$target_path) == 1)
{
# -> Upload réussi
echo "Upload OK";
}
}
}
?>
cs_caviar Messages postés 329 Date d'inscription samedi 4 janvier 2003 Statut Membre Dernière intervention 29 mars 2015 2
18 nov. 2008 à 12:43
salut, pas mal ton petit script. Pour ceux qui sont intéresses par un système en flash il y a aussi NAS Uploader que vous trouvez ici
http://www.nasuploader.com
@++
touhami_com1 Messages postés 1 Date d'inscription mardi 9 janvier 2007 Statut Membre Dernière intervention 12 novembre 2008
12 nov. 2008 à 22:49
un autre script qui fonctionne pas merde alors ca sert a quoi de poster des tas de merde qui fonctionne pas ?
lau10 Messages postés 3 Date d'inscription dimanche 10 décembre 2000 Statut Membre Dernière intervention 28 novembre 2014
6 mai 2008 à 12:58
bonjour

problème : Fatal error: Call to a member function testerExtension() on a non-object in C:\Program Files\EasyPHP 2.0b1\www\Multiupload\traitement.php on line 68

résolu en rajoutant l'initialisation de la class Fichier avant de tester l'extension:
$monFichier = new Fichier;
if ($monFichier->testerExtension($_FILES['fichier1']['name']) == 1)

pour les 4 caractères de l'extension : le format JPEG est-il indispensable ? pas très courant me semble t-il et renommable en JPG

ce script fonctionne, il est simple et je le trouve utile, même si d'après les experts il n'est pas très optimisé.
plaroche Messages postés 1 Date d'inscription lundi 7 juin 2004 Statut Membre Dernière intervention 14 novembre 2007
14 nov. 2007 à 11:42
Pour ma part, j'utile les scripts de SWFUpload.

http://swfupload.mammon.se/download.php, il ya des exemples, c'est tres simple et ca

combine du flash + AJAX.
jacknikolson Messages postés 134 Date d'inscription jeudi 17 juin 2004 Statut Membre Dernière intervention 18 novembre 2012
12 nov. 2007 à 14:04
Rien à faire, je suis passé sous easyphp 2.0 mais maintenant je me retrouve avec les erreurs suivantes:

Notice: Undefined variable: monFichier in C:\Program Files\EasyPHP 2.0b1\www\Multiupload\traitement.php on line 68

Fatal error: Call to a member function testerExtension() on a non-object in C:\Program Files\EasyPHP 2.0b1\www\Multiupload\traitement.php on line 68
alover971 Messages postés 8 Date d'inscription samedi 25 février 2006 Statut Membre Dernière intervention 30 novembre 2007
12 nov. 2007 à 12:21
bon j'ai tester donc..
Malheureusement ca ne me convient pas du tout hein :))) lol
j'ai besoin d'un upload ou on selectionne plusieurs fichier d'un coup...
malheureusement faut swf upload, ou fancy upload (basé dessus) et ca pause pb car y'a des bugs encore :( snif !
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
12 nov. 2007 à 11:00
Hello,

c'est du PHP5 et tu es en PHP4. Firefox ou IE ça ne changera rien.
jacknikolson Messages postés 134 Date d'inscription jeudi 17 juin 2004 Statut Membre Dernière intervention 18 novembre 2012
12 nov. 2007 à 10:02
Je viens de tester:

Chez moi sous FF voici la réponse quand je clique sur "Uploader les fichiers"

Parse error: parse error, expecting `T_OLD_FUNCTION' or `T_FUNCTION' or `T_VAR' or `'}'' in d:\mes documents\02multimédia\php\www\multiupload\traitement.php on line 10
alover971 Messages postés 8 Date d'inscription samedi 25 février 2006 Statut Membre Dernière intervention 30 novembre 2007
12 nov. 2007 à 07:54
peut etre un manque d'optimisation et de fonctionnalité mais .. je vais aller tester..
puisque j'ai justement besoin d'un uploadm ultiple qui marche à 100%.. comparer à beaucoup qui buggué une fois sur 10..
par contre, je crois que ton upload multiple, on doit selectionner un par un, car je ne vois pas de fichier flash.. seul lui gère la selection multiple :)
Donc je pense que je vais garder fancyupload qui est effectivement le meilleur que j'ai pu voir..
petit problème est qu'il utilise mootools, et non pas jquery.. et que cela m'embeter legerement :D
webdeb Messages postés 488 Date d'inscription samedi 5 avril 2003 Statut Membre Dernière intervention 31 mars 2009 4
8 nov. 2007 à 21:37
Une autre appli sympa et opensource qui fait pareil que la tienne :

http://digitarald.de/project/fancyupload/
Zeo34 Messages postés 7 Date d'inscription jeudi 29 mai 2003 Statut Membre Dernière intervention 10 janvier 2009
8 nov. 2007 à 10:41
Salut,
Le script PHP est une portion du code d'un des projets que je gère au niveau de mon travail dans une société privée. Comme j'étais assez pressé de rajouter ces scripts sur PHPCS, je n'ai pas relu. Deplus, il n'est qu'une portion d'un ensemble ... Comme je ne travaille pas seul sur les projets Web, nous (les webmasters) avont mis en place des méthodes de scripts ... Pour prendre en compte les niveaux de programmation de chacun.
Cordialement,
Damien
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
8 nov. 2007 à 01:25
Salut,

La méthode testerExtension est inutile. Elle fait totalement doublon avec la méthode recupererExtension.
if ($fichier -> recupererExtension())
sera vrai si une extension est retournée, faux sinon.

Cette méthode recupererExtension, justement, comporte une erreur :
$extensions = array('.jpg', '.JPG' , '.jpeg', '.JPEG','.png','.PNG','.gif','.GIF','.bmp','.BMP');
$ext = strtolower(substr($fichier,'-4'));

Pour le cas d'extensions qui font 4 caractères, l'extension ne sera pas trouvée.
Je préfère, et de loin, utiliser une PCRE pour récupérer l'extension sans le point

$ext = preg_replace('/.*\.([^\.]*)/', '$1', $fichier);
return in_array($ext, $extensions) ? $ext : false;

Par ailleurs, je verrais bien les extensions autorisées définies en dehors de la méthode : définir à chaque fois une variable de la même manière, c'est un peu lourd.

if (copy($fichier,$destination) == TRUE)
{
return TRUE;
}
else
{
return FALSE;
}

=>
return (copy($fichier,$destination));
Du coup, cette methode ne sert à rien : elle ne fait que renommer une fonction php.
Du coup, pour tester l'extension, comme le disait Malalam, ça ne mérite pas une classe.

public function __construct()
{
$this->fichier;
}

Je ne comprends pas l'intérêt du constructeur...
la propriété Fichier::fichier n'est même pas définie... Cette ligne ne fait, en fait, rien...

Donc inutile de mettre un constructeur dans ce cas là, l'objet sera construit malgré tout.
De même que le destructeur : S'il n'est pas spécifié, cela n'empêche pas l'objet d'être détruit.

Encore un détail :
if (is_dir("uploads") == FALSE)

>>>

if (!is_dir('uploads'))

Bref... Ca mériterait d'être sérieusement raccourci...
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
7 nov. 2007 à 19:59
Hello,

ouais, y a surtout bcp de js!
Au passage, jquery n'est pas un framework ajax. C'est une librairie javascript. Ca ne permet pas QUE de faire de l'ajax. D'ailleurs, ton code en est la preuve : il n'y a pas d'ajax.

Sinon, ben je ne connaissais pas cette extension de jquery : Multifile. C'est intéressant. Je testerai tout ça. N'ayant pas du tout testé ton code, je réserve mon commentaire dessus (la partie php donc) pour plus tard. Le js, vu qu'il n'est pas de toi, je ne le commenterai pas :-) Mais bon juste : là, t'avais pas franchement besoin d'une classe...
Rejoignez-nous