Upload de fichier en php

Upload de fichier en php - PHP - Programmation

Marsh Posté le 21-12-2005 à 22:41:39    

Bonjour,
voila je voudrais pouvoir uploader des fichiers par le biais du php.
Donc pour cela, j'utilise un formulaire HTML qui appel un script PHP, mais en fait j'obtient l'erreur suivante quand je l'exécute :Warning: move_uploaded_file(): Unable to access.............................
Donc après avoir lu divers articles sur le sujet, le problème vient apparament des droit d'accès au dossier (comme le message d'erreur l'indique !). Mais j'ai tout essayé mais ya pas moyen :(
Alors quelqu'un peut-il m'aider svp ?
Merci

Reply

Marsh Posté le 21-12-2005 à 22:41:39   

Reply

Marsh Posté le 22-12-2005 à 10:15:47    

Bonjour!
 
En effet, cela peut venir des droits
As tu fait un CHMOD 666 sur le dossier dans lequel tu veux uploader tes fichiers? (je crois que c'est 666, mais ma mémoire est un peu rouillée :( )


Message édité par Xtina le 22-12-2005 à 10:16:05
Reply

Marsh Posté le 22-12-2005 à 10:31:33    

Dans le fonctionnement, l'upload par un formulaire est dans un premier temps geré par Apache qui va deposer le fichier dans un repertoire de travail. Donc verifier les droits en ecriture sur ce dossier pour Apache.
 
Ensuite, verifier que PHP puisse lire ce repertoire. Et bien sur, si tu fais un move, controle le droit en ecriture sue le repertoire cible.


---------------
MZP est de retour
Reply

Marsh Posté le 22-12-2005 à 15:10:58    

Bon je pense que ça sera plus simple que je vous donne les sources, alors voici le formulaire :

Code :
  1. <html>
  2.     <body>
  3.         <form enctype="multipart/form-data" action="verif_upload.php" method="post">
  4.             <input type="hidden" name="MAX_FILE_SIZE" value="100000" />
  5.             Fichier pdf : <input type="file" name="fichier" /><br>
  6.             <input type="submit" />
  7.         </form>
  8.     </body>
  9. </html>


 
et voici le script PHP :

Code :
  1. <?php
  2. if(isset($_FILES['fichier']))
  3. {
  4.   // params
  5.   unset($erreur);
  6.   $extensions_ok = array('pdf');
  7.   $taille_max = 100000;
  8.   $dest_dossier = '/var/www/free.fr/3/b/*****.******/staps/fichiers';
  9.   // vérifications
  10.   if( !in_array( substr(strrchr($_FILES['fichier']['name'], '.'), 1), $extensions_ok ) )
  11.   {
  12.     $erreur = 'Veuillez sélectionner un fichier de type pdf !'; 
  13.   }
  14.   elseif( file_exists($_FILES['fichier']['tmp_name'])
  15.           and filesize($_FILES['fichier']['tmp_name']) > $taille_max)
  16.   {
  17.     $erreur = 'Votre fichier doit faire moins de 500Ko !';
  18.   }
  19.   // copie du fichier
  20.   if(!isset($erreur))
  21.   {
  22.     $dest_fichier = basename($_FILES['fichier']['name']);
  23.     // formatage nom fichier
  24.     // enlever les accents
  25.     $dest_fichier = strtr($dest_fichier, 'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
  26.     // remplacer les caracteres autres que lettres, chiffres et point par _
  27.     $dest_fichier = preg_replace('/([^.a-z0-9]+)/i', '_', $dest_fichier);
  28.     // copie du fichier
  29. chmod ($dest_dossier, 0777);
  30.     move_uploaded_file($_FILES['fichier']['tmp_name'], $dest_dossier . $dest_fichier);
  31.   }
  32. }
  33. ?>


Voila :)


Message édité par hacksi le 22-12-2005 à 15:12:04
Reply

Marsh Posté le 22-12-2005 à 16:04:51    

le coup du chmod dans ton script, je suis pas sûr que ce soit une bonne idée. Mieux vaut mettre les droits sur le répertoire une bonne fois pour toute et pas à chaque exécution du script. En +, si le serveur est en Windows, je ne suis pas sûr que chmod fonctionne.
Sinon, pour éviter que le script plante, tu peux tester si t'as les droits en écriture sur le répertoire de destination ; si c'est pas le cas, tu mets un message d'erreur à toi...

Reply

Marsh Posté le 22-12-2005 à 16:06:25    

et comment je les changent les droits directement, car j'essaye de le faire avec filezilla mais apparament les droits ne sont pas enregistrés ?

Reply

Marsh Posté le 22-12-2005 à 17:25:05    

les droits, ça serait pas plutôt 777?

Reply

Marsh Posté le 22-12-2005 à 17:30:09    

bin si mais comment je fais pour mettre en 777 ?

Reply

Marsh Posté le 22-12-2005 à 17:41:00    

euh 777 :ouch:, 666 serait dejà beaucoup mieux.


---------------
MZP est de retour
Reply

Marsh Posté le 22-12-2005 à 17:43:01    

ok mais bon ça me dit toujours pas comment le mettre :) ?

Reply

Marsh Posté le 22-12-2005 à 17:43:01   

Reply

Marsh Posté le 22-12-2005 à 17:44:30    

tu te connectes avec filezilla, tu cliques droits sur le dossier, et voilà je sais plus ce qui est marqué


Message édité par Ryoh le 22-12-2005 à 17:45:05
Reply

Marsh Posté le 22-12-2005 à 17:45:40    

bin c'est ce que je fais ça marche, mais quand je reclick sur le dossier pour vérifier si c'est bien appliqué, bin c'est revenu au point de départ :(

Reply

Marsh Posté le 22-12-2005 à 17:51:54    

tu ne peux pas faire un bon telnet ou ssh sur le serveur?


---------------
MZP est de retour
Reply

Marsh Posté le 22-12-2005 à 17:52:45    

lol la ça devient trop technique pour moi, je précise que j'utilise un compte free :)

Reply

Marsh Posté le 22-12-2005 à 20:39:57    

alors non.


---------------
MZP est de retour
Reply

Marsh Posté le 24-12-2005 à 00:23:40    

Ton erreur, "move_upload_files unabled to access", c'est peut-être aussi que tu donnes un répertoire qui n'existe pas. Je suis chez Free et mon upload de fichier fonctionne avec des lignes toutes simples:
 
if(isset($HTTP_POST_FILES['fichier']['tmp_name'])){
   $fichier = $_FILES['fichier']['name'];
   $tmp = $_FILES['fichier']['tmp_name'];
 
   if ( $fichier ){
      //indiquer l'url relative vers le dossier d'upload
      $chemin="image/";
      $nouveau_nom = $chemin.$fichier;
   
      if ( move_uploaded_file( $tmp , $nouveau_nom ) ) {
         echo "<br>Transfert du fichier réussi<br><br>";
         echo "<br>Pour voir votre fichier, <a href=".$nouveau_nom.">Cliquez ici</a>";
      }
      else {
         echo "Transfert échoué<br>";
      }
   }
}

Reply

Marsh Posté le 24-12-2005 à 15:25:32    

Je viens d'essayer avec ta solution mais j'ai toujours le même problème d'accès, alors comme fais-tu pour donner les droits d'accès à ton dossier image ?

Reply

Marsh Posté le 24-12-2005 à 15:40:38    

Je viens de trouver le problème, c'était juste une question de '/' où il ne fallait pas :)
Voila donc maintenant j'arrive à uploader les fichiers, j'arrive à affichier le contenu du fichier dans lequel j'upload, mais je voudrais savoir s'il est possible d'ajouter pour chaque fichier un boutton "télécharger" et un autre "supprimer" car je ne vois pas comment faire sans Base de données :)
Merci

Reply

Marsh Posté le 28-12-2005 à 14:31:19    

Oui, c'est possible. Utilise la fonction readdir() qui permet de lire les noms de fichiers d'un répertoire. Exemple:
 
$h=opendir("image/" );
while($file=readdir($h)) echo $file."<br>";
closedir($h);

Reply

Marsh Posté le 28-12-2005 à 14:41:59    

oui, ça j'ai réussi à la faire, mais ce que je voudrais savoir, c'est comment utiliser des bouttons qui font référence à un fichier ??

Reply

Marsh Posté le 28-12-2005 à 16:45:06    

pour ouvrir un fichier, utilise la fonction javascript window.open car tu connais le nom de tes fichiers.
 
echo "<input type=button onclick=\"javascript:window.open('".$file."','_blank')\">";


Message édité par remi-san le 28-12-2005 à 16:46:34
Reply

Marsh Posté le 28-12-2005 à 16:45:59    

ok merci et pour le técharger et le supprimer ?

Reply

Marsh Posté le 02-01-2006 à 16:25:07    

hacksi a écrit :

ok merci et pour le técharger et le supprimer ?


télécharger -> un simple lien hypertexte avec le bon chemin (répertoires et nom du fichier) en face de chaque fichier
Supprimer -> un bouton en face de chaque fichier qui contient le nom du fichier à supprimer (ou alors un lien vers un script .php qui prend en paramètre le nom du fichier à supprimer). Après, dans ton php, tu récupères le nom du fichier à supprimer et tu utilises la fonction unlink().

Reply

Marsh Posté le 02-01-2006 à 16:25:11    

ouai je suis d'accords pour le télécharger mais pour le supprimer, comment tu fais puisque ce n'est pas une base de données ? unlink sert-il à supprimer directement le fichier ?


Message édité par hacksi le 02-01-2006 à 16:34:02
Reply

Marsh Posté le 02-01-2006 à 16:34:04    

il te l'a dit: utilises unlink()  :hello:

Reply

Marsh Posté le 02-01-2006 à 16:34:44    

à ok je ne savais pas que cela servait à ça :)

Reply

Marsh Posté le 09-01-2006 à 11:07:35    

Pourriez-vous me donner un exemple de l'utilisation de unlink() svp

Reply

Marsh Posté le 09-01-2006 à 14:19:50    

hacksi a écrit :

Pourriez-vous me donner un exemple de l'utilisation de unlink() svp


 
va sur http://fr.php.net/ et cherche la fonction unlink. y'a juste à passer le path complet du fichier à supprimer, c'est quand même pas dur!
 

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed