Problème tuto upload de fichiers

Petit nouveau ! | 2 Messages

06 juil. 2005, 23:35

Bonsoir je suis nouveau^^
J'ai lu et testé le tuto sur les upload de fichiers, mais ce sujet est vérouillé alors je demande de l'aide ici :) .

J'ai déjà essayé de résoudre mon problème sur un autre forum (attendez avant de me mitrailler lol :lol: ) mais on a pas trouvé la solution, alors j'ai prévenu que je demanderai ici. (j'ai vu dans le règlement que poser une question sur plusieurs forums été interdit alors je le précise)
(pour ceux que ca intéressent: http://www.phportail.net/forum/viewtopi ... 2618#p2618)

Bon en gros je voudrai, à partir d'une partie admin, ajouter des images dans un repertoire, je spécifie plusieurs erreurs (qui fonctionne très bien quand elle le doit). Mais lorsque l'image est bonne, elle ne se rajoute pas non plus :s ...
<?php
if(isset($_FILES['image']))
{
// params
unset($erreur);
$extensions_ok = array('png', 'gif', 'jpg', 'jpeg', 'JPG');
$taille_max = 200000;
$dest_dossier = '../images/dessins/pics/';
// utilisez également des slashes sous windows : $dest_dossier = 'd:/damien/photos/';
$taille = $_FILES['image']['size'];
// vérifications
if( !in_array( substr(strrchr($_FILES['image']['name'], '.'), 1), $extensions_ok ) )
{
$erreur = 'Veuillez sélectionner une image de type png, gif, jpg, jpeg ou JPG ;)';
}
elseif (!is_dir($dest_dossier)) {
     $erreur = 'Veuillez indiquer un r&eacute;pertoire destination correct !';
   } 
elseif (!is_writeable($dest_dossier)) {
     $erreur = 'Veuillez spécifier des droits en écriture pour le r&eacute;pertoire destination !';     
   }
elseif ($taille > $taille_max) {
     $erreur = 'Veuillez sélectionner une image de taille inférieure à 200Ko !';
   }
// copie du fichier
if(!isset($erreur))
{
$dest_fichier = basename($_FILES['image']['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 et verification
if (is_uploaded_file($_FILES['image']['tmp_name'])) {
$erreur = 'L\'image a été uploadée avec succes, mais n\'a pas pu être copiée.'; 
move_uploaded_file($_FILES['image']['tmp_name'], $dest_dossier . $dest_fichier);
  if (is_uploaded_file($dest_dossier . $dest_fichier)){
    $reussi = 'yeah! Enfin!!!!';
  }
}
elseif (!is_uploaded_file($_FILES['image']['tmp_name'])) {
$erreur = 'L\'image n\'a pas été uploadée';
}
}
}
 
?>
<!-- Erreur ? -->

<div class="en-tete"><div class="img_en-tete"></div>
<?php
if(isset($erreur)){
echo $erreur ;
}
elseif(isset($reussi)){
echo $reussi ;
}
else{
?>
Avant d'ajouter une image, tenez compte des conditions suivantes :<br />
- Le nom de l'image, et le nom de la miniature doivent être identiques, ainsi que leurs extensions (attention aux majuscules).<br />
- L'image peut être en portrait ou paysage, peut être de n'importe quelle taille, mais DOIT être inférieure à 200ko.<br />
- La miniature DOIT être en paysage (plus jolie), peut-etre de n'importe quelle taille (elle sera automatiquement générée à la bonne taille), et DOIT être inférieure à 200ko.<br />
<br />
ps: Si l'image est en paysage, alors vous pouvez la rajouter en tant que miniature ;)
<?php } ?>
</div><br />
<!-- Formulaire -->
<!-- Attention, ne de ne pas oublier le enctype="multipart/form-data" -->
<form method="POST" action="index.php?page=ajout_image" enctype="multipart/form-data">
<!-- Limiter la taille des fichiers à 200Ko -->
<input type="hidden" name="MAX_FILE_SIZE" value="200000" />
<fieldset>
<legend>Envoi d'une image et de sa miniature^^</legend>
<!-- champs d'envoi de fichier, de type file -->
<p><label for="image">Image :</label><input type="file" name="image" /></p>
<p><label for="miniature">Miniature :</label><input type="file" name="miniature" /></p>
<!-- bouton d'envoi -->
<p><input type="submit" name="envoi" value="Envoyer les fichiers" /></p>
</legend>
</fieldset>
</form>
le chmod est en 777(s'il n'y a pas de droit d'écriture il me le dirait), le dossier de destination existe (si pas il me l'affichait aussi), et mon hébergeur (nuxit) est on pour files_upload.

Quand je tente d'envoyer une image, $erreur = L'image a été uploadée avec succes, mais n'a pas pu être copiée.

Ca fait plusieurs jours que je cherche, si ca se trouve c'est une petite connerie, mais franchement si quelqu'un pouvait m'aider ca serait bien sympa! (plz :cry: )

Mammouth du PHP | 19672 Messages

07 juil. 2005, 00:40

Salut, essaye ceci :
    // copie du fichier
    if(!isset($erreur))
    {
        $dest_fichier = basename($_FILES['image']['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 et verification
        if (is_uploaded_file($_FILES['image']['tmp_name']))
        {
            if( move_uploaded_file($_FILES['image']['tmp_name'], $dest_dossier . $dest_fichier))
            {
                $reussi = 'yeah! Enfin!!!!';
            }
            else
            {
                $erreur = 'L\'image a &eacute;t&eacute; upload&eacute;e avec succes, mais n\'a pas pu &ecirc;tre copi&eacute;e.';
            }
        }
        else
        {
            $erreur = 'L\'image n\'a pas &eacute;t&eacute; upload&eacute;e';
        }
    }
Et vérifie si le chemin vers le répertoire de destination est correct par rapport à la page en cours d'affichage, j'ai un doute sur ce point à cause du "../", mais bon, je ne connais pas l'architecture de ton site
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Petit nouveau ! | 2 Messages

07 juil. 2005, 08:02

Oh la fausse joie! :cry:
Il m'a affiché "yeah enfin" lol
Mais non l'image n'y est toujours pas :?

Pour le fichier de destination, si j'en mets un faux, il va m'afficher l'erreur. Donc la je suppose que c'est bon, mais bon je vais quand même donner un peu la structure.

Quand j'ouvre mon ftp j'ai ceci:

news
sql
www

ma page admin se trouve dans:
/www/admin/index.php?page=ajout_image (include galerie.php (qui se trouve dans le même dossier))
mon répertoire lui se trouve la:
/www/images/dessins/pics/

En tout cas merci deja de m'avoir répondu^^ (j'avais peur de me prendre un vent lol)

(ps: si je ne repond pas tout de suite c'est normal, je pars dans 10 minutes en vacs et je re dans quelques jours)

Eléphant du PHP | 128 Messages

07 juil. 2005, 09:15

Je suis pas sur mais est ce qu'il ne faudrait pas echapper le point dans l'expression reguliere?
$dest_fichier = preg_replace('/([^.a-z0-9]+)/i', '_', $dest_fichier);
Ce qui donnerait
$dest_fichier = preg_replace('/([^\.a-z0-9]+)/i', '_', $dest_fichier);
C'est pas moi qui ai volé l'orange !