[résolu] Upload de fichiers (merci bcp)

Mammouth du PHP | 19672 Messages

12 juin 2005, 09:46

boby78,
tu as oublié un détail: l'url du fichier upload.php ne nous avance pas beaucoup, on ne peut pas voir le code mais une page blanche..., il faudrait que tu nous mettes le code ici ou sur un wall du site à la rigueur.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 19672 Messages

12 juin 2005, 10:18

Bon, j'ai repris le code du tuto et je l'ai revu complètement et testé, pour ma part, il fonctionne très correctement, voici ce que ça donne:
<?php
if(isset($_FILES['photo']))
{
    // params
    unset($erreur);
    $taille_max = $_POST['taille_max'];
    $dest_dossier = './';
    // utilisez également des slashes sous windows : $dest_dossier = 'd:/damien/photos/';
    // vérifications
    if($_FILES["photo"]["type"] != "image/jpeg" && $_FILES["photo"]["type"] != "image/png" && $_FILES["photo"]["type"] != "image/gif")
    {
        $erreur = "Veuillez sélectionner un fichier de type png, gif ou jpg !";
    }
    elseif( file_exists($_FILES['photo']['tmp_name']) and $_FILES['photo']['size'] > $taille_max)
    {
        $erreur = "Votre fichier doit faire moins de ". $taille_max / 1024 ."Ko !";
    }
    // copie du fichier
    if(!isset($erreur))
    {
        $dest_fichier = basename($_FILES['photo']['name']);
        // formatage nom fichier
        // enlever les accents
        $dest_fichier = strtr($dest_fichier,
        'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
        'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
        // remplacer les caracteres autres que lettres, chiffres et point par _
        $dest_fichier = preg_replace('/([^.a-z0-9]+)/i', '_', $dest_fichier);
        // copie du fichier
        if(move_uploaded_file($_FILES['photo']['tmp_name'], $dest_dossier . $dest_fichier))
        {
            $message = "<p>Le fichier ". $_FILES['photo']['name'] ." a été correctement téléchargé vers ". $dest_dossier . $dest_fichier .".</p>\n";
        }
        else
        {
            $erreur = "Une erreur s'est produite, le téléchargement s'est interrompu.";
        }
    }
}
?>
<html>
<body>
<!-- Erreur ? -->
<?php
if(isset($erreur))
{
    echo "<p>". $erreur ."</p>\n";
}
elseif(isset($message))
{
    echo($message);
}
?>
<!-- Formulaire -->
<!-- Attention, ne de ne pas oublier le enctype="multipart/form-data" pour l'envoi de fichiers -->
<form method="POST" action="<?php echo($_SERVER['PHP_SELF']); ?>" enctype="multipart/form-data">
<!-- Limiter la taille des fichiers à 500Ko (500 x 1024) -->
  <input type="hidden" name="MAX_FILE_SIZE" value="512000" />
<!-- 
On ajoute un champ de taille maxi pour le traitement coté 
serveur d'une taille égale ou légèrement inférieure au champ précédent 
-->
  <input type="hidden" name="taille_max" value="512000" />
  <fieldset>
  <legend>Envoi de fichiers</legend>
<!-- champs d'envoi de fichier, de type file -->
  <p><label for="photo">Photo :</label><input type="file" name="photo" /></p>
<!-- bouton d'envoi -->
  <p><input type="submit" name="envoi" value="Envoyer les fichiers" /></p>
  </legend>
  </fieldset>
</form>
</body>
</html>
Il te reste à ajuster les paramètres de taille de fichier et le répertoire de destination.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 19 Messages

12 juin 2005, 13:12

Merci de vos réponses, désolé je pensais qu'en donnant l'adresse on pouvait voir le code mais non :(

donc voila le code que j'ai sur upload.php
<?php
if(isset($_FILES['photo']))
{
    // params
    unset($erreur);
    $taille_max = $_POST['taille_max'];
    $dest_dossier = 'photos/';
    // utilisez également des slashes sous windows : $dest_dossier = 'photos/';
    // vérifications
    if($_FILES["photo"]["type"] != "image/jpeg" && $_FILES["photo"]["type"] != "image/png" && $_FILES["photo"]["type"] != "image/gif")
    {
        $erreur = "Veuillez sélectionner un fichier de type png, gif ou jpg !";
    }
    elseif( file_exists($_FILES['photo']['tmp_name']) and $_FILES['photo']['size'] > $taille_max)
    {
        $erreur = "Votre fichier doit faire moins de ". $taille_max / 1024 ."Ko !";
    }
    // copie du fichier
    if(!isset($erreur))
    {
        $dest_fichier = basename($_FILES['photo']['name']);
        // formatage nom fichier
        // enlever les accents
        $dest_fichier = strtr($dest_fichier,
        'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
        'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
        // remplacer les caracteres autres que lettres, chiffres et point par _
        $dest_fichier = preg_replace('/([^.a-z0-9]+)/i', '_', $dest_fichier);
        // copie du fichier
        if(move_uploaded_file($_FILES['photo']['tmp_name'], $dest_dossier . $dest_fichier))
        {
            $message = "<p>Le fichier ". $_FILES['photo']['name'] ." a été correctement téléchargé vers ". $dest_dossier . $dest_fichier .".</p>\n";
        }
        else
        {
            $erreur = "Une erreur s'est produite, le téléchargement s'est interrompu.";
        }
    }
}
?>
 
Maintenant même les "petites" images ne marchent pas :?
Modifié en dernier par boby79 le 12 juin 2005, 13:37, modifié 1 fois.

Eléphanteau du PHP | 19 Messages

12 juin 2005, 13:23

Bizarement voici le code "alternatif" placé sur upload2.php (qui marche)
<?php
if(isset($_FILES['photo']))
{
    // params
    unset($erreur);
    $extensions_ok = array('png', 'gif', 'jpg', 'jpeg');
    $taille_max = $_POST['taille_max'];
    $dest_dossier = 'photos/';
    // vérifications
    if( !in_array( substr(strrchr($_FILES['photo']['name'], '.'), 1), $extensions_ok ) )
    {
        $erreur = 'Veuillez sélectionner un fichier de type png, gif ou jpg !';
    }
    elseif( file_exists($_FILES['photo']['tmp_name']) && $_FILES['photo']['size'] > $taille_max)
    {
        $erreur = "Votre fichier doit faire moins de ". $taille_max / 1024 ." Ko !";
    }
    // copie du fichier
    if(!isset($erreur))
    {
        $dest_fichier = basename($_FILES['photo']['name']);
        // formatage nom fichier
        // enlever les accents

        $dest_fichier = strtr($dest_fichier, 'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
        // remplacer les caracteres autres que lettres, chiffres et point par _
        $dest_fichier = preg_replace('/([^.a-z0-9]+)/i', '_', $dest_fichier);
        // copie du fichier
        if(move_uploaded_file($_FILES['photo']['tmp_name'], $dest_dossier . $dest_fichier))
        {
            echo("<p>Le fichier a été correctement chargé dans son répertoire.</p>\n");
        }
        else
        {
            echo("<p>Une erreur s'est produite : Le fichier n'a pas été correctement chargé.</p>\n");
        }
    }
}

?>
quand je mets dans le formulaire action=upload.php ca marche pas, en revanche sur upload2.php la ca marche, mais ça marche juste pour les toutes petites images, j'ai essayé avec une de 256Ko et ça ne marche plus . Ca ouvre upload2.php sans le message de confirmation et ça marque "terminé" en bas ... Bizare :?
Modifié en dernier par boby79 le 12 juin 2005, 13:36, modifié 2 fois.

Eléphanteau du PHP | 19 Messages

12 juin 2005, 13:29

C'est encore moi, bon j'ar refait avec le premier upload.php
<?php
if(isset($_FILES['photo']))
{
    // params
    unset($erreur);
    $taille_max = $_POST['taille_max'];
    $dest_dossier = 'photos/';
    // utilisez également des slashes sous windows : $dest_dossier = 'photos/';
    // vérifications
    if($_FILES["photo"]["type"] != "image/jpeg" && $_FILES["photo"]["type"] != "image/png" && $_FILES["photo"]["type"] != "image/gif")
    {
        $erreur = "Veuillez sélectionner un fichier de type png, gif ou jpg !";
    }
    elseif( file_exists($_FILES['photo']['tmp_name']) and $_FILES['photo']['size'] > $taille_max)
    {
        $erreur = "Votre fichier doit faire moins de ". $taille_max / 1024 ."Ko !";
    }
    // copie du fichier
    if(!isset($erreur))
    {
        $dest_fichier = basename($_FILES['photo']['name']);
        // formatage nom fichier
        // enlever les accents
        $dest_fichier = strtr($dest_fichier,
        'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
        'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
        // remplacer les caracteres autres que lettres, chiffres et point par _
        $dest_fichier = preg_replace('/([^.a-z0-9]+)/i', '_', $dest_fichier);
        // copie du fichier
        if(move_uploaded_file($_FILES['photo']['tmp_name'], $dest_dossier . $dest_fichier))
        {
            $message = "<p>Le fichier ". $_FILES['photo']['name'] ." a été correctement téléchargé vers ". $dest_dossier . $dest_fichier .".</p>\n";
        }
        else
        {
            $erreur = "Une erreur s'est produite, le téléchargement s'est interrompu.";
        }
    }
}
?>
Ca a marcher avec 256Ko mais il n'y a plus le message de confirmation :?
Modifié en dernier par boby79 le 12 juin 2005, 13:35, modifié 1 fois.

ViPHP
fab
ViPHP | 2657 Messages

12 juin 2005, 13:31

y a des balises php c'est pas pour rien ...

Mammouth du PHP | 19672 Messages

12 juin 2005, 13:37

Si tu as bien regardé le script, pour le message de confirmation, ce n'est pas $erreur mais $message qu'il faut faire afficher, c'est pour ça que j'avais rajouté un second test juste avant le formulaire.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 19 Messages

12 juin 2005, 13:38

donc je remplace $erreur par $message :?:

Merci de m'avoir répondu

Eléphanteau du PHP | 19 Messages

12 juin 2005, 13:41

y a des balises php c'est pas pour rien ...
Désolé, je suis nouveau je n'avais pas vu, j'ai fait les modifs :wink:

Mammouth du PHP | 19672 Messages

12 juin 2005, 13:49

donc je remplace $erreur par $message :?:
Tu ne remplace pas, tu rajoutes., regarde le script que j'ai mis plus haut, ça devrait être très évident, enfin il me semble, j'écris pas en chinois... :-k
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 19 Messages

12 juin 2005, 14:13

Donc j'ai bien relu tout ce que tu as marqué, il faut que je mette cela si j'ai bien compris :
<?php
if(isset($erreur))
{
    echo "<p>". $erreur ."</p>\n";
}
elseif(isset($message))
{
    echo($message);
}
?> 
Par contre j'ai pas encore compris où il faut le mettre dans la page :oops:

dsl vraiment dsl :(

Mammouth du PHP | 19672 Messages

12 juin 2005, 14:28

Réfléchis et sois logique: C'est forcément quelque part APRÈS la partie tratiement :est-ce que ça te semble cohérent ?

Sois logique en tous temps, les choses se déroulent dans un ordre précis, à toi d'intercaller les éléments dont tu as besoin pour obtenir un résultat à un moment précis d'un script.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 19 Messages

12 juin 2005, 14:50

alros je pense que c'est comme cela :
<?php
if(isset($_FILES['photo']))
{
    // params
    unset($erreur);
    $taille_max = $_POST['taille_max'];
    $dest_dossier = 'photos/';
    // utilisez également des slashes sous windows : $dest_dossier = 'photos/';
    // vérifications
    if($_FILES["photo"]["type"] != "image/jpeg" && $_FILES["photo"]["type"] != "image/png" && $_FILES["photo"]["type"] != "image/gif")
    {
        $erreur = "Veuillez sélectionner un fichier de type png, gif ou jpg !";
    }
    elseif( file_exists($_FILES['photo']['tmp_name']) and $_FILES['photo']['size'] > $taille_max)
    {
        $erreur = "Votre fichier doit faire moins de ". $taille_max / 1024 ."Ko !";
    }
    // copie du fichier
    if(!isset($erreur))
    {
        $dest_fichier = basename($_FILES['photo']['name']);
        // formatage nom fichier
        // enlever les accents
        $dest_fichier = strtr($dest_fichier,
        'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
        'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
        // remplacer les caracteres autres que lettres, chiffres et point par _
        $dest_fichier = preg_replace('/([^.a-z0-9]+)/i', '_', $dest_fichier);
        // copie du fichier
        if(move_uploaded_file($_FILES['photo']['tmp_name'], $dest_dossier . $dest_fichier))

if(isset($erreur))
{
    echo "<p>". $erreur ."</p>\n";
}
elseif(isset($message))
{
    echo($message);
} 
        {
            $message = "<p>Le fichier ". $_FILES['photo']['name'] ." a été correctement téléchargé vers ". $dest_dossier . $dest_fichier .".</p>\n";
        }
        else
        {
            $erreur = "Une erreur s'est produite, le téléchargement s'est interrompu.";
        }
    }
}
?>
je me suis trompé ?

Eléphanteau du PHP | 19 Messages

12 juin 2005, 14:54

ça doit pas être au bon endroit :(
Parse error: parse error, unexpected T_ELSE in /home/clients/www/avds79.com/www/upload2.php on line 43

Eléphant du PHP | 199 Messages

12 juin 2005, 15:04

Code : Tout sélectionner

{ $message = "<p>Le fichier ". $_FILES['photo']['name'] ." a été correctement téléchargé vers ". $dest_dossier . $dest_fichier .".</p>\n"; }
Je pense que ca te pose problème de créer un bloc comme ca. Tu as du oublier un if ou quelque chose comme ca.
Les 2 font la paire : coder ET commenter :wink: