upload d'un fichier csv sur le serveur

Petit nouveau ! | 4 Messages

06 juil. 2008, 20:55

Hello tlm,

j'ai bien lu votre tutoriel sur l'update d'un fichier mais je voudrais savoir comment supprimé l'étape du client qui fournit le chemin d'accès pour le fichier a loader sur le serveur. Le fichier que mon client doit charger sur le serveur sera tjs au moment endroit sur son poste. En gros je voudrai juste appuyer sur envoyé et que ça envois directement le ficher sur le serveur.

merci d'avance pour vos réponse.

voilà le code que j'ai pris sur votre tuto

Code : Tout sélectionner

<?php /** * function formatFileName * @access public * @param string - nom de fichier à formater * @param int - longueur maximale autorisée pour le nom de fichier * @return string - nom de fichier formaté * @desc Tronque éventuellement le nom de fichier, le convertit en minuscules et * y élimine les caractères potentiellement dangereux. */ function formatFileName($aFileName, $aMaxLength = 50) { $aFileName = strToLower(subStr($aFileName, 0, $aMaxLength)); $aFileName = ereg_replace('[^a-zA-Z0-9,._\+\()\-]', '_', $aFileName); return $aFileName; } // end of function formatFileName() /2 /* PARAMETRES DE CONFIGURATION DU SCRIPT */ // chemin d'accès au répertoire d'upload (vers où le fichier uploadé temporaire sera transféré) // ce répertoire doit EXISTER et être ACCESSIBLE EN ECRITURE !! $destination_dir = '/var/www/html/upload'; // taille maximale en octets du fichier à uploader $file_max_size = 100; // extensions de fichiers autorisées $authorized_extensions = array('jpg', 'gif'); /* TRAITEMENT PRINCIPAL */ // vérifie l'existence du répertoire de destination if (!is_dir($destination_dir)) { echo 'Veuillez indiquer un r&eacute;pertoire destination correct !'; die(); } // vérifie que répertoire de destination a des droits en écriture if (!is_writeable($destination_dir)) { echo 'Veuillez spécifier des droits en écriture pour le r&eacute;pertoire destination !'; die(); } // réception du formulaire if (isSet($_POST['submitFile'])) { // vérifie qu'un fichier a bien été soumis if (isSet($_FILES) && is_array($_FILES)) { // pas d'erreur lors de l'upload if ($_FILES['aFile']['error'] == UPLOAD_ERR_OK) { // vérifie la taille en octets if ($_FILES['aFile']['size'] <= $file_max_size) { // vérifie l'extension du fichier recu // il est aussi possible (et sans doute mieux) de se baser sur $_FILES['aFile']['type'] // qui retourne le type MIME correspondant (par exemple: image/pjpeg) $lastPos = strRChr($_FILES['aFile']['name'], "."); if ($lastPos !== false && in_array(strToLower(subStr($lastPos, 1)), $authorized_extensions)) { // définit un nom de fichier destination unique à partir du nom du fichier original formaté $destination_file = time().formatFileName($_FILES['aFile']['name']); // déplace le fichier uploadé du répertoire temporaire // vers les répertoire/fichier destination spécifiés if (move_uploaded_file($_FILES['aFile']['tmp_name'], $destination_dir.DIRECTORY_SEPARATOR.$destination_file)) { echo 'Fichier valide et upload&eacute; correctement.'; } else { // error sur move_uploaded_file echo 'Le fichier n\'a pas &eacute;t&eacute; upload&eacute; correctement !'; } } else { // pas d'extension ou mauvaise extension echo 'Mauvaise extension !'; } } else { // Taille maximale dépassée echo 'Fichier trop volumineux !'; } } else { // Erreur lors de l'upload switch ($_FILES['aFile']['error']){ case UPLOAD_ERR_INI_SIZE: echo 'Le fichier upload&eacute; d&eacute;passe la valeur sp&eacute;cifi&eacute;e pour upload_max_filesize dans php.ini.'; break; case UPLOAD_ERR_FORM_SIZE: echo 'Le fichier upload&eacute; d&eacute;passe la valeur sp&eacute;cifi&eacute;e pour MAX_FILE_SIZE dans le formulaire d\'upload.'; break; case UPLOAD_ERR_PARTIAL: echo 'Le fichier n\'a &eacute;t&eacute que partiellement upload&eacute;.'; break; default: echo 'Aucun fichier n\'a &eacute;t&eacute upload&eacute;.'; } // switch } } else { // aucun fichier reçu echo 'Pas de fichier recu'; } } // fin de réception de formulaire ?>
Modifié en dernier par hibou le 07 juil. 2008, 15:23, modifié 1 fois.

ViPHP
ViPHP | 5924 Messages

06 juil. 2008, 21:24

Réponse simple, c'est impossible…

Petit nouveau ! | 4 Messages

06 juil. 2008, 21:29

comment ça impossible ? a pas moyen d'indiquer dans le code ou aller chercher le fichier automatiquement ?

Mammouth du PHP | 19672 Messages

06 juil. 2008, 21:38

Non parce que ça voudrait dire que le navigateur pourrait accéder n'importe où sur la machine de l'internaute, ce serait une importante faille de sécurité. Donc il doit impérativement y avoir intervention de l'internaute pour ça.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

ViPHP
ViPHP | 2287 Messages

06 juil. 2008, 23:35

Réponse compliquée : pour faire cela il faut s'y prendre d'une manière radicalement différente, c'est à dire sur la machine du client. Et ça n'a vraiment plus rien à voir avec le code que tu fournis. Ca te fait toujours envie ? :-)
if(!@work()){ Nespresso(); } else { what(); }
______________________________

Petit nouveau ! | 4 Messages

07 juil. 2008, 00:40

oui ça m'intéresse beaucoup, car je n'arrive pas a comprendre pourquoi ce n'est pas possible.
car le chemin d'accès que l'utilisateur passe avant de cliquer sur envoyé est stocké dans une variable, donc si on force le chemin d'accès, c'est à dire que par défaut il y a tjs : C:\NomRepertoire\fichier.csv que l'utilisateur clique sur envoyé je vois pas ou est la différence avec la méthode ou l'utilisateur entre lui même le chemin d'accès avant de cliquer sur envoyer.

ViPHP
ViPHP | 5924 Messages

07 juil. 2008, 02:27

oui ça m'intéresse beaucoup, car je n'arrive pas a comprendre pourquoi ce n'est pas possible.
car le chemin d'accès que l'utilisateur passe avant de cliquer sur envoyé est stocké dans une variable, donc si on force le chemin d'accès, c'est à dire que par défaut il y a tjs : C:\NomRepertoire\fichier.csv que l'utilisateur clique sur envoyé je vois pas ou est la différence avec la méthode ou l'utilisateur entre lui même le chemin d'accès avant de cliquer sur envoyer.
La différence est que tu ne peux pas l'indiquer au navigateur. :-/
Et c'est une mesure de sécurité parce que de cette manière tu ne peux pas suggérer à l'internaute au fichier, tu ne peux pas le tromper. Deuxième raison, je te signale que C:\NomRepertoire\fichier.csv ça ne veut rien dire sur la majorité des systèmes, donc il n'y a pas de raison que ce ne soit pas /home/user/NomRepertoire/fichier.csv le chemin du fichier, voilà donc une excellente raison de ne pas permettre d'indiquer le chemin puisqu'il y a une chance non négligeable qu'il soit faux…

Enfin pour le faire vraiment, il faut que tu abandonnes le html et que tu fasses un applet java ou une animation flash qui récupère le fichier (avec, il y a des chances, tout de même une intervention de l'utilisateur) et l'envoie au serveur.

Petit nouveau ! | 4 Messages

08 juil. 2008, 13:21

petit question si dans la zone prévu pour mettre le chemin d'accès au fichier, j'inscria par défaut un texte est-ce que ça va fonctionner ?

PS je peux garantir le chemin car un .bat fera une copie du fichier avec le chemin que je veux.(les utilisateurs seront tous sous win.)

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

08 juil. 2008, 15:23

Tu ne peux forcer le contenu d'un input type=""file"

Comme ça déjà été dit, c'est une notion de sécurité.
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer