IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Upload] Copie de fichiers dans un répertoire


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2005
    Messages : 115
    Points : 50
    Points
    50
    Par défaut [Upload] Copie de fichiers dans un répertoire
    Bonjour,

    Je suis newbie en php et je souhaite créer une galerie photos avec des rubriques pour que les internautes puissent choisir une rubrique et afficher les photos correspondantes. Pour ça, j'ai créé 2 tables, une "rubrique" et une "image" avec une relation et un formulaire accessible par l'administrateur pour pouvoir ajouter dans un dossier relatif à la rubrique concernée les bonnes photos automatiquement.

    Le formulaire s'affiche correctement avec une liste déroulante des rubriques disponibles mais j'ai un message d'erreur:
    Warning: copy() [function.copy]: The first argument to copy() function cannot be a directory in C:\wamp\www\monsite\BDDphotos_admin_add_img.php on line 63
    ERROR
    Des fichiers qui se trouvent sur mon C:/ sont copiés dans mon dossier "photos" . Je suppose que mon lien vers mon fichier "photos" n'est pas correct mais il me semble que oui?

    Et les fichiers qui ont été copiés n'ont pas été placés dans le dossier lié à la rubrique mais dans le fichier général "photos"...

    J'ai le répertoire de mon site avec un dossier "photos" et des dossiers avec mes rubriques.

    Voici le code pour créer le formulaire en question:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    <?php
    mysql_connect("localhost", "root", "");
    mysql_select_db("monsite");
    echo "<form action='BDDPhotos_admin_add_img.php' 
    enctype='multipart/form-data'
    	    method='post'>
    	Répertoire des images:<br/>
    	  <input type='text' name='frm_files_folder' size='40' 
    value='../photos/temp'/>
    	  <br/><br/> 
    	Rubrique: ";
     
    $result = mysql_query("SELECT RubriqueID, RubriqueName FROM Rubrique 
    	  ORDER BY RubriqueName DESC") or die("requête non exécutée");
     
    echo "<select name='frm_select_rubrique'>";
    $Selected = 0;
    while ($row = mysql_fetch_array($result))
    {
      if($Selected == 0)
      {
        echo '<option value="', $row[0], '" selected="selected">', $row[1], 
    '</option>';
        $Selected = 1;
      }
      else
      {
        echo '<option value="', $row[0], '">', $row[1], '</option>';
      }
    }
    echo "</select>
    	<br/><br/>
    	<input type='submit' value='Ajouter images' id='submit'/> 
    	</form>";
     
    $FilesFolder = $_POST['frm_files_folder'];
    // Ajoute / à la fin du chemin du répertoire si manquant
    if (substr($FilesFolder, -1) != "/") 
      $FilesFolder = $FilesFolder."/";
    // Vérifie que le chemin correspond bien à un répertoire
    if (!is_dir($FilesFolder)) 
    {
      echo "ERROR";
      return;
    }
     
    $handle = opendir($FilesFolder);
    if ($handle == 0)
    {
      echo "ERROR";
      return;
    }
    // Saute le . et le ..
    readdir($handle);
    readdir($handle);
    // Parcours les images
    while (($fichier = readdir($handle)) !== false)
    {	    
      // TODO: Vérifier ici que l'extension du fichier correspond à une image
     
      // Copie les images du repertoire temporaire vers le répertoire images 
      if (!copy($FilesFolder.$fichier, "../photos/".$RubriqueName."/".$fichier))
      {
        echo "ERROR";
      }
     
      // TODO: Récupérer les informations sur l'image (taille, dimensions, ...)
     
      // Ajoute l'image à la base de données
      $Date = date("Y-m-d");
      $Time = date("H:i:s");
      $query = "INSERT INTO Image SET 
    		ImageID='NULL', 
    		RubriqueID='$RubriqueID',
    		ImageName='$fichier',
    		ImageDesc='', 
                   	ImageRes='', 
                   	ImageSize='',
    		Date='$Date',
    		Time='$Time'"; 
      $result = mysql_query($query); 
    }
    closedir($handle);
     
    ?>
    Merci à tous pour l'aide

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Pour le warning, quand tu parcours les élements d'un repertoire, tu parcours aussi les repertoires qu'il contient, y compris les elements "." et "..", il faut donc les exclure avant de faire copy.
    d'ailleurs tu l'avais ecris "// Saute le . et le .."

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    while (($fichier = readdir($handle)) !== false)
    {
    if ($fichier != "." && $fichier != "..") {
    if (!copy($FilesFolder.$fichier, "../photos/".$RubriqueName."/".$fichier))
    Pour le reste, ou est défini le $RubriqueName que tu utilises ici ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2005
    Messages : 115
    Points : 50
    Points
    50
    Par défaut
    Bonjour Sabotage,

    Merci beaucoup pour ton aide Je suis un grand débutant, donc pas mal d'erreurs du débutant

    J'avais effectivement oublié d'ajouter cette ligne, mais même avec, le code ne fonctionne pas? j'ai également défini (j'avais aussi oublié) $RubriqueName mais l'erreur reste la même et toujours sur la même ligne "if (!copy($FilesFolder.$fichier, "../photos/".$RubriqueName."/".$fichier))". Je ne vois vraiment pas où est l'erreur?

    merci pour l'aide,

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 39
    Points : 47
    Points
    47
    Par défaut
    Ce que tu as rajouté exclue . et .., mais tu peux avoir d'autres répertoires dans le lot.

    Utilise la fonction is_dir :
    http://fr.php.net/is_dir

    Au passage, tu as vraiment intérêt à contrôler la valeur de $_POST['frm_files_folder'] si c'est pour un site internet.

Discussions similaires

  1. Réponses: 0
    Dernier message: 17/04/2013, 14h17
  2. Réponses: 1
    Dernier message: 22/03/2013, 16h09
  3. [Batch] Copie de fichiers dans un répertoire variable
    Par tarnx dans le forum Scripts/Batch
    Réponses: 7
    Dernier message: 08/06/2011, 11h25
  4. [VBA-Excel] Copie d'un fichier dans un répertoire
    Par marsupilami34 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 23/10/2006, 14h46
  5. [Upload] Uploader un fichier dans un répertoire spé !
    Par .:Djil:. dans le forum Langage
    Réponses: 2
    Dernier message: 11/07/2006, 13h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo