Commentaires sur l'article Envoyer un fichier en ligne, partie 2

Bonjour Patrice.

Je suis interresé par cet article pour l'envoie de fichier par JQuerry et Ajax que je trouve super clair dans vos exlications. Par contre comment peut on sélectionner plusieurs fichiers pour les envoyer? Je sais qu'il existe un champ "multiple" dans les formes qui d'apres ce que j'ai lu permet de sélectionner plusieurs fichier dans la boite de dialoque de sélection de fichier, mais je vois pas trés bien (cela n'est pas encore assez clair pour moi) de savoir comment récupérer ces différents fichier pour les envoyer). Avez vous déja fait cela? Pour la fonction foreach je vois mais c'est pour récupérer le nom des fichiers et les traiter que je bloque.

SuperGood à 19h05

Bonjour SuperGood,

Vous pouvez utiliser plusieurs champs <input type="file" />.
Voir le manuel : http://php.net/manual/fr/features.file-upload.multiple.php.

Ceci dit à votre place j'essayerais une autre approche. Regardez mon article sur la façon de créer une zone de glissé déposé et d'envoi direct du fichier via AJAX.

Il suffirait de désactiver la zone de réception le temps du chargement et de la réactiver une fois le fichier chargé.

Patrice à 11h10

Bonjour patrice superbe article, par contre je bloque sur la version responseXML car j'aimerais qu'après l'upload ma page se redirige vers une autre avec bien entendu mes variables d'upload.

j'espère que ma question n'est pas trop idiote car je commence avec le JavaScript et l'Ajax.

j'avance a mon rythme...

Merci

genesia à 15h28

Bonjour genesia,

Il n'y a jamais de question idiote :-)
Pourquoi ne pas rediriger la page en php en enregistrant les variables d'upload dans des variables de sessions ?

Par exemple en faisant quelque chose comme :
$_SESSION['imgName'] = $fName'.'.$fType;
$_SESSION['imgMime'] = $fPost['type'];
$_SESSION['imgPath'] = $fPath;

Bon courage.

Patrice à 16h31

A vrai dire mon problème est un peu complexe, j'aurais du mieux m'expliquer. j'ai une page en php avec un system d'uploade qui permet d'enregistrer,renommer après de resizer les photos.

le tout est sur la meme page ($_SERVER["PHP_SELF"]), j'ai voulus adapter votre système de progressbar qui est superbe mais je perd a ce moment les variables et ma page s'ouvre vide.

c'est assez complexe a expliquer je pourrais éventuellement si vous le permettez vous faire parvenir la page php.

genesia à 17h53

Bonsoir genesia,

Je vois le principe. Que ça reste sur le même fichier n'est pas un problème.

Mais si vous rechargez la page dans le navigateur, il faut passer les variables d'une manière ou d'un autre. Soit avec $_GET, soit avec $_POST, soit dans une $_SESSION, soit dans un fichier temporaire.
Si vous ne voulez pas recharger la page dans ce cas tout se passe avec Javascript.

Vous ouvez m'envoyer une url vers le fichier en question, je pourrais y jeter un oeil.

Patrice à 20h33

bonsoir Patrice,

très bien ci-joint l'url, SVP effacer cela du commentaire.

http://www.******

genesia à 20h53

Bonsoir,

Le lien ne fonctionne pas je suis redirigé systématiquement vers le dossier admin.

Patrice à 20h57

désolé, c'est la sécurité du site j'ai retire le script interdiction click droit.

cela marche avec Firefox je peux vous envoyer le fichier sur un mail si vous voulez?

genesia à 21h13

excusez moi ca marche c'était un contrôleur de session, je l'ai désactivé

genesia à 21h25

Tant mieux si ça fonctionne. Bonne soirée genesia.

Patrice à 21h40

bonsoir Patrice,

non le script ne marche toujours pas, c'est l'accès au fichier pour vous qui marche.

a vrai dire c'est la partie..

complete: function(xhr){
$("#uploadResult > p").html(xhr.responseText);
$("#uploadProgress").fadeOut(200, function(){
$("#uploadResult").fadeIn();

qui doit me poser un problème, pouvez vous me dire
comment mettre la fonction avec xhr.responseXML et la redirection?

excusez moi d'être un peu lourd sur le coup.

merci

genesia à 21h50

Si vous envoyez les données en XML il faut les parser.
jQuery propose une fonction pour ça :
http://api.jquery.com/jquery.parsexml/

var data = '<?xml version="1.0" encoding="UTF-8"?><data><image>img/test.png</image><mime>JPG</mime></data>';
xmlDoc = $.parseXML(data);
$xml = $(xmlDoc);
alert($xml.find("image").text());

Charge à vous de manipuler les données selon votre besoin

La redirecion en javascript c'est :
window.location.href = "http://www.monsite.fr

Mais à votre place j'utiliserais des variables de sessions ou des données $_POST c'est plus sécurisé que d'envoyer des données XML au navigateur.

Patrice à 22h22

bonsoir Patrice,

bon je ne vais pas vous ennuyer plus longtemps, car je ne comprend pas tout.

je crois que je vais essayer autre chose, merci en tout cas de votre patience.

bonne soirée

genesia à 22h40

Bonjour et merci pour votre script
Puis-je abuser et vous prier bien fort de me sortir de mon ignorance d'autodidacte encore très nulle , mais acharnée!
je n'arrive pas à savoir comment compléter certaines lignes avec mes propres données. Pourriez vous me dire ce qu'il y a de faux dans ce que (bcp de choses sans doute):
$fUpload = 'upload/message/www/astrogonale.com/'; // dossier de destination
$fName = 'photo'; // nom du fichier de destination
$fPost = $_FILES['photo.jpg']; // fichier envoyé
// liste des format de fichier accepté


$lst = array('image/jpeg'=>'jpg','image/jpeg'=>'jpg');
$fType = $lst[$fPost['photo.jpg']]; // type du fichier qui nous intéresse
$fPath = $fUpload.$fName.'.'.$fType; // chemin complet après déplacement
if(empty($fType)){
// fichier inconnu
echo 'Fichier de type inconnu';

Quant à la ligne suivante, impossible de trouver ce qu il convient d'ajouter pour ne plus avoir de message d'erreur:
}else if(move_uploaded_file($fPost['photo'], $fPath)){

et si le chargement réussit faut il passer par le FTP pour récupérer son image?
jE CROISE LES DOIGTS EN ESPERANT QUE VOUS VOUDREZ BIEN ME REPONDRE...sinon j'abandonne
merci d'avance
Lina

Lina à 23h31

Bonsoir Lina,

C'est bien d'être autodidacte, je le suis aussi ;-)
Quelle est l'erreur exacte ?
Dans votre cas il faut que le dossier upload/message/www/astrogonale.com/ existe.
Ce sont des chemins d'accès relatifs, n'oubliez pas.

Une fois le fichier en ligne pas besoin de passer par du FTP, on peut y accéder en PHP :
echo '<img src="'.$fPath.'" />;

Patrice à 21h01

Merci Patrice d'avoir pris la peine de me répondre
Hélas mes essais restent infructueux...
oui j'ai bien créé le dossier upload à la place que j'indique mais voilà le message d'erreur que j'obtiens à chaque fois:

Warning: move_uploaded_file(upload/message/www/astrogonale.com/test.png) [function.move-uploaded-file]: failed to open stream: No such file or directory in /home/astrogon/www/message/upload.php on line 24

Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/tmp/phpz5Qyns' to 'upload/message/www/astrogonale.com/test.png' in /home/astrogon/www/message/upload.php on line 24
erreur
la ligne 24 est celle ci:
}else if(move_uploaded_file($fPost['tmp_name'], $fPath)){
Avez vous la solution???
Pour vous remercier, je vous envoie un peu de la beauté du lagon calédonien...
Lina

Lina à 09h41

Bonjour Lina,

Ces deux erreurs indiquent qu'il n'arrive ni à ouvrir le fichier, ni à le déplacer. C'est probablement une erreur dans vos chemins d'accès.

1- vérifiez que le champ du formulaire s'appelle bien 'photo.jpg' :
<input id="uploadImg" name="photo.jpg" type="file" accept=".jpg,.png,.gif,image/png,image/jpg,image/gif">

Sinon vérifiez la liste des fichiers envoyé avec print_r($_FILES);

2- Vous pouvez tester l'existence du dossier de destination
if (!file_exists($fUpload)){
echo '<p>Le dossier n\'existe pas !</p>';
}

Patrice à 09h27

Merci encore, Patrice pour votre aide, mais je n arrive décidément à rien malgré des heures d effort...
Pourriez vous seulement me dire encore une chose: le script en question appartient à quel type de php?
En effet, pour compléter le tout , mon hébergeur, OVH, vient de signaler à ses clients que le php 5.3 est désormais obsolete... Et qu il allait falloir mettre ses fichiers à jour.
Je vais donc m enquérir d une aide sur place, à Noumea, car la je me sens perdue
Merci encore
Cordialement
Lina

Lina à 10h16

Bonjour Lina,

Les quelques lignes resteront compatibles PHP 5.4 ou 5.5, pas de soucis.
Vous avez testé le chemin d'accès de la variable $fUpload ?
Vous pouvez faire un test simple en chargant le fichier dans le même dossier que le script PHP.

Patrice à 15h28

Bonjour Patrice,
Pas encore la réussite mais des progrès tout de même!
Cependant:"fichier de type inconnu" s'affiche dès l'ouverture de la page avant même que j'aie choisi un fichier-image
puis le fichier choisi se telecharge, je vois la progression à 100%...
Un progrès: plus de warnings!
Mais: fichier inconnu affiché une seconde fois
mais pas de notification de reussite du déplacement et pas d'image dans le dossier

Merci pour votre aide...je vais bien finir par y arriver!

Lina à 20h42

Bonjour Lina,

L'erreur doit être affiché par le fichier PHP.
if(empty($fType)){
// fichier inconnu
echo 'Fichier de type inconnu';
}else{
[...]
}

Le fichier accepte des fichier JPG, PNG ou GIF.
Vous avez envoyé quel type d'image ?
Vous pouvez rajouter d'autres type si vous voulez, en modifiant la variables $lst :
$lst = array('image/gif'=>'gif', 'image/jpeg'=>'jpg', 'image/pjpeg'=>'jpg', 'image/png'=>'png');

Vous trouverez la liste des type d'image sur le site php.net :
- http://php.net/manual/fr/function.image-type-to-mime-type.php

Bon courage, vous allez y arriver ;-)

Patrice à 14h13

Ajouter votre commentaire

Votre adresse ne sera pas affichée.

Elle sert à vous envoyer une notification.