Bonsoir,

J'ai un petit script qui me permet de récupérer une image depuis une url le script fonctionne à moitié la ou sa bloque ses pou placer l'image dans le dossier approprié et pour renommé l'image.

Déjà il faut savoir à quoi va servir se formulaire, il sert à ajouter un titre pour un site de musique lorsqu'on ajoute un titre il faut renseigné le nom de l'artiste si un dossier avec le nom de l'artiste n'existe pas dans le dossier album on le crée. Mais il faut aussi pouvoir placer l'image de la pochette de l'album dans le dossier qui porte le nom de l'artiste et enfin dernière opération renom l'image pour lui donne le même nom que le titre de la musique.

le script:

<h1><br>Ajouter un titre</h1>
        <form method="post" action="index.php">

                <label for="name" >Nom de l'artiste</label><br>
                <input type="text" name="name" id="name" ><br>
                <br>
                <label for="title" >Titre</label><br>
                <input type="text" name="tile" id="title" ><br>
                <br>
                <?php 
                    if(isset($_GET) && !empty($_GET) && $_GET'mode']== "dir"){
                        echo '<label for="file" >Upload par un dossier</label><br><input type="file" name="file" id="file" size="50" />
                        <p><a href="?mode=">Annuler</a></p>';

                    }else{
                        echo '<label for="url" >Upload par URL</label><br><input type="text" name="url" id="url" size="50" /><br>
                        <p><a href="?mode=dir" >Uploadé depuis un dossier</a></p>';
                    }
                ?>
                <br><br>
                <input name="submit" type="submit" /><br>
        </form>

<?php
    if(isset($_POST) && !empty($_POST)){

        $name = $_POST'name'];

        if(is_dir("album/".$name)){
            echo "dossier existant";
        }
        else{       
            mkdir("album/".$name, 0700);
            echo "dossier créer";
        }

        // maximum execution time in seconds        
        set_time_limit ( 24 * 60 * 60 ) ;
        if (!isset($_POST'submit'])) die() ;
        $destination_folder = 'album/'.$name;
        $url = $_POST'url'] ;
        $newfname = $destination_folder . basename ( $url ) ;
        $file = fopen ( $url , "rb" ) ;
        if($file ){
            $newf = fopen ( $newfname , "wb" ) ;
        }
        if ( $newf ){
            while ( ! feof ( $file ) ){
                fwrite ( $newf , fread ( $file , 1024 * 8 ) , 1024 * 8 ) ;
            }
        }
        if ( $file ) fclose ( $file ) ;
        if ( $newf ) fclose ( $newf ) ;
    }

?>

J'espère avoir était assez claire dans mais explication sinon si vous avez des questions n'hésitez pas :)

4 réponses


ksta
Réponse acceptée

salut :)
je pense que cela viens de l'espace entre le nom de l'ancien fichier et la virgule :)

essaye ceci :

$ancien_nom = trim("album/$names");
$nouveau_nom = "album/$name/$titre.jpg";
rename($ancien_nom,$nouveau_nom);

tien nous au courant ;)

vavoir
Auteur

Je viens de trouvé la fonction rename() qui et superbe car en plus de déplacer le fichier elle me permet de le renommer.

rename("album/$names","album/$name/$titre.jpg");

Sauf que j'obtient l'erreur suivante:

Warning: rename(album/3jyiro05.jpg ,album/chat/chat_002.jpg) <a href='function.rename'>function.rename</a>]: La syntaxe du nom de fichier, de répertoire ou de volume est incorrecte. (code: 123) in C:\wamp\www\tuto\upload\index.php

je remet le script en entier si sa peut aider:

<h1><br>Ajouter un titre</h1>
        <form method="post" action="index.php">

                <label for="name" >Nom de l'artiste</label><br>
                <input type="text" name="name" id="name" ><br>
                <br>
                <label for="title" >Titre</label><br>
                <input type="text" name="tile" id="title" ><br>
                <br>
                <?php 
                    if(isset($_GET) && !empty($_GET) && $_GET'mode']== "dir"){
                        echo '<label for="file" >Upload par un dossier</label><br><input type="file" name="file" id="file" size="50" />
                        <p><a href="?mode=">Annuler</a></p>';

                    }else{
                        echo '<label for="url" >Upload par URL</label><br><input type="text" name="url" id="url" size="50" /><br>
                        <p><a href="?mode=dir" >Uploadé depuis un dossier</a></p>';
                    }
                ?>
                <br><br>
                <input name="submit" type="submit" /><br>
        </form>

<?php
    if(isset($_POST) && !empty($_POST)){
        if(isset($_POST'name'])){
            $name = $_POST'name'];
            if(is_dir("album/".$name)){
            }
            else{       
                mkdir("album/".$name, 0700);
            }
        }
        if(isset($_POST'tile'])){
            $titre = $_POST'tile'];
        }

        // maximum execution time in seconds        
        set_time_limit ( 24 * 60 * 60 ) ;
        if (!isset($_POST'submit'])) die() ;
        $destination_folder = 'album/';
        $url = $_POST'url'] ;
        $newfname = $destination_folder . basename ( $url ) ;
        $names = basename($newfname).PHP_EOL;
        $file = fopen ( $url , "rb" ) ;
        if($file ){
            $newf = fopen ( $newfname , "wb" ) ;
        }
        if ( $newf ){
            while ( ! feof ( $file ) ){
                fwrite ( $newf , fread ( $file , 1024 * 8 ) , 1024 * 8 ) ;
            }
        }

        if ( $file ) fclose ( $file ) ;
        if ( $newf ) fclose ( $newf ) ;

        rename("album/$names","album/$name/$titre.jpg");
    }
?>

j'ai peut être pas très bien compris le pb mais si j'ai bien compris tu n'arrive pas a récupérer l'image ...

si c'est cela il fait ajouter

enctype="multipart/form-data"

a ta form.

<form action="ton-action" mathod="ta-method" enctype="multipart/form-data">TON-CONTENUE</form>
vavoir
Auteur

@NetArt merci de ta réponse mais j'arrive très bien à récupéré l'image se que je n'arrive pas à faire c'est à déplacé l'image dans le bon répertoire et à la renommer avec la fonction rename('album/$img', 'album/aqua/$nouvo_nom.jpg').

@ksta Mille merci à toi sa fonctionne impec :)