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

Eléphanteau du PHP | 19 Messages

11 juin 2005, 19:33

Salut a tous, je suis nouveau ici et deja je sens que vous allez beaucoup m'aider :?

donc j'aimerais mettre en place un upload de photos sur mon site, j'ai suivi a la lettre ce tuto : http://www.phpfrance.com/tutoriaux/inde ... e-fichiers

Et ca ne marche pas, mon dossier photos reste vide

Voici le fichier form.htm

Code : Tout sélectionner

<html> <body> <!-- Erreur ? --> <?php if(isset($erreur)){ echo '<p>',</p>'; } ?> <!-- Formulaire --> <!-- Attention, ne de ne pas oublier le enctype="multipart/form-data" --> <form method="POST" action="upload.php" enctype="multipart/form-data"> <!-- Limiter la taille des fichiers à 500Ko --> <input type="hidden" name="MAX_FILE_SIZE" value="500000" /> <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> <p><label for="photo_2">Photo 2 :</label><input type="file" name="photo_2" /></p> <!-- bouton d'envoi --> <p><input type="submit" name="envoi" value="Envoyer les fichiers" /></p> </fieldset> </form> </body> </html>
et le fichier upload.php

Code : Tout sélectionner

<?php if(isset($_FILES['photo'])) { // params unset($erreur); $extensions_ok = array('png', 'gif', 'jpg', 'jpeg'); $taille_max = 100000; $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']) and filesize($_FILES['photo']['tmp_name']) > $taille_max) { $erreur = 'Votre fichier doit faire moins de 500Ko !'; } // 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 move_uploaded_file($_FILES['photo']['tmp_name'], $dest_dossier . $dest_fichier); } } ?>
Ou y'a-t-il une erreur ? j'ai oublié quelquechose ?

Merci de m'aider car je suis dans une impasse

A bientot :D
Modifié en dernier par boby79 le 14 juin 2005, 16:21, modifié 3 fois.

Mammouth du PHP | 19672 Messages

11 juin 2005, 19:37

Tu n'es pas le premier à qui ça arrive et la réponse a été donnée il n'y a pas longtemps: fais une petite recherche dans les archives du forum avec "upload fichier", tu vas trouver pas mal de choses.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 19 Messages

11 juin 2005, 19:38

A oui, j'avais oublié de préciser que j'ai éffectué une recherche au préalable et ca ne m'a pas éclairé plus que cela, je vais tenter de (re)chercher.

Merci quand meme :wink:

Eléphanteau du PHP | 19 Messages

11 juin 2005, 19:49

:( Bon, je trouve vraiment pas quelquechose de bien a me mettre sous la dent, un petit peu d'aide me serait vraiment utile. :agenouille:

Je ne demande qu'on me fasse le boulot mais au moins que l'on m'aide un petit peu :)

A bientot

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

11 juin 2005, 21:26

est-ce que le dossier de destination à les droits en écriture ?

je vois que tu fais aussi un test sur l'extension, alors que tu as un champ 'type' dans le tableau $_FILES qui serait sans doute plus approprié

Mammouth du PHP | 19672 Messages

11 juin 2005, 21:39

Ok, alors voici ces deux même fichiers avec quelques corrections. Les explications suivent:
Le formulaire
<html>
<body>
<!-- Erreur ? -->
<?php
if(isset($erreur))
{
    echo "<p>Erreur : ". $erreur ."</p>";
}
?>
<!-- Formulaire -->
<!-- Attention, ne de ne pas oublier le  enctype="multipart/form-data" -->
<form method="POST" action="upload.php" enctype="multipart/form-data">
  <!-- Limiter la taille des fichiers à 500Ko -->
  <input type="hidden" name="MAX_FILE_SIZE" value="500000" />
<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>
<p><label for="photo_2">Photo 2 :</label><input type="file" name="photo_2" /></p>
<input type="hidden" name="taille_max" value="500000" />
<!-- bouton d'envoi -->
<p><input type="submit" name="envoi" value="Envoyer les fichiers" /></p>
</fieldset>
</form>
</body>
</html>
Le traitement
<?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");
        }
    }
}

?>
J'ai corrigé dans le formulaire un début de PHP qui avait une apostrophe exédentaire au milieu qui mettait un peu la zone.

Ensuite dans la partie traitement, j,ai modifié la récupération de la taille en utilisant directement un des index de la variable $_FILES. Pour simplifier, j'ai également ajouté un champ caché dans le formulaire pour la taille maxi: comme ça, pas besoin d l'écrire à deux places différentes, surtout que tu avais mis 500000 dans le formulaire et 100000 dans le traitement, ce qui devait probablement bloquer.

Enfin, j'ai ajouté un test sur le chargement du fichier dans son répertoire : au moins si le chargement se fait ou ne se fait pas, il y aura un retour visuel direct.

Reviens avec le résultat de l'essai.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 19 Messages

11 juin 2005, 22:25

est-ce que le dossier de destination à les droits en écriture ?
oui, merci quand meme :wink:

Eléphanteau du PHP | 19 Messages

11 juin 2005, 22:27

Merci beaucoup cyrano voici le résultat pas encore satisfaisant mais deja mieux : http://www.avds79.com/form.htm

Eléphanteau du PHP | 19 Messages

11 juin 2005, 22:29

a oui, j'oubliais :
Warning: move_uploaded_file(/photos/_Angel.gif): failed to open stream: No such file or directory in /home/clients/www/avds79.com/www/upload.php on line 29

Warning: move_uploaded_file(): Unable to move '/home/clients/interne/apache/upload/phpw4OWKU' to '/photos/_Angel.gif' in /home/clients/www/avds79.com/www/upload.php on line 29

Une erreur s'est produite : Le fichier n'a pas été correctement chargé.

Eléphant du PHP | 199 Messages

11 juin 2005, 22:33

Essaye de replace $dest_dossier = '/photos/';
par $dest_dossier = 'photos/'; ou par $dest_dossier = './photos/';
Les 2 font la paire : coder ET commenter :wink:

Eléphanteau du PHP | 19 Messages

11 juin 2005, 22:36

Merci beaucoup smarties !!!

Et merci à tous de votre patience et de votre aide, vous êtes géniaux :roll:

a tres bientot j'espere !!! :!:

Mammouth du PHP | 19672 Messages

11 juin 2005, 22:36

[Résolu] :?:
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 19 Messages

11 juin 2005, 22:37

Ouais !!! Encore merci à tous :D

Eléphanteau du PHP | 19 Messages

12 juin 2005, 00:53

Bon j'ai crier victoire trop vite :( Ca marche bien, le problème, c'est que dès que le fichier fait plus de 200Ko ça marche 1 fois sur 20 ... et puis le maximum que j'ai pu faire c'est 295 Ko ...

C'est un problème de l'hébergeur ? du php ?

si vous voulez voir le résultat :

http://www.avds79.com/photos.htm (en bas de la page)

et le php http://www.avds79.com/upload.php

Merci beaucoup pour ce que vous avez deja fait pour m'aider !!!

a bientot :wink:

Eléphant du PHP | 199 Messages

12 juin 2005, 09:39

Pour info, quand tu fais /repertoire/ le / au début va à la racine du disque et y cherche répertoire, c'est pour cela que ca ne marchait pas.
Les 2 font la paire : coder ET commenter :wink: