Aller au contenu

Problème avec un script d'upload


patricia.b

Sujets conseillés

Bonjour,

J'ai le script php suivant pour permettre l'upload de fichiers sur mon site, avec des chmods 733.


<?php
$dossier = 'upload/';
$fichier = basename($_FILES['avatar']['name']);
$taille_maxi = 102400;
$taille = filesize($_FILES['avatar']['tmp_name']);
$extensions = array('.png', '.gif', '.jpg', '.jpeg' '.xls');
$extension = strrchr($_FILES['avatar']['name'], '.');
//Début des vérifications de sécurité...
if(!in_array($extension, $extensions)) //Si l'extension n'est pas dans le tableau
{
$erreur = 'Vous devez uploader un fichier de type png, gif, jpg, jpeg, xls';
}
if($taille>$taille_maxi)
{
$erreur = 'Le fichier est trop gros...';
}
if(!isset($erreur)) //S'il n'y a pas d'erreur, on upload
{
//On formate le nom du fichier ici...
$fichier = strtr($fichier,
'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
$fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier);
if(move_uploaded_file($_FILES['avatar']['tmp_name'], $dossier . $fichier)) //Si la fonction renvoie TRUE, c'est que ça a fonctionné...
{
echo 'Upload effectué avec succès !';
}
else //Sinon (la fonction renvoie FALSE).
{
echo 'Echec de l\'upload !';
}
}
else
{
echo $erreur;
}
?>

Ce script est "alimenté" par le formulaire ci-dessous, placé sur une page hmtl:

<form name="upload" enctype="multipart/form-data" method="post" action="upload.php">
<!-- On limite le fichier à 100Ko --><input type="hidden" name="MAX_FILE_SIZE" value="102400">
Fichier : <input type="file" name="avatar">
<input type="submit" name="envoyer" value="Envoyer le fichier">
</form>

Cela fonctionne parfaitement. Mais je voudrais qu'après que l'upload du fichier soit fait, ou s'il y a erreur, un retour vers la page de formulaire soit possible.

J'ai utilisé le code suivant :

// Récupération de l'url de retour
$return_link = $_SERVER['HTTP_REFERER'];

Puis ai créé la fonction de retour automatique :

function createReturnLink(){
global $return_link;
echo "<a href='".$return_link."'>Retour</a><br>";
}

et placé

echo(createReturnLink());

après echo 'Upload effectué avec succès !'; et echo 'Echec de l\'upload !';

Et là, rien ne va plus et je me retrouve avec le message d'alerte :

"Warning: move_uploaded_file(upload/Image-1.png) [function.move-uploaded-file]: failed to open stream: Permission denied in /home/admiplus/domains/admiplus.fr/public_html/upload.php on line ... [celle qui correspond dans mon script à : if(move_uploaded_file($_FILES['avatar']['tmp_name'], $dossier . $fichier))]

Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/tmp/phpenWX3O' to 'upload/Image-1.png' in /home/admiplus/domains/admiplus.fr/public_html/upload.php on line ... [idem ci-dessus]

Echec de l'upload !"

J'ai supposé qu'il me fallait changer mes chmods, mais même avec les 777, j'obtiens le même résultat.

Où fais-je erreur à votre avis ?

Merci par avance de votre aide...

Lien vers le commentaire
Partager sur d’autres sites

As-tu vérifié si /tmp/phpenWX3O (ou le nom temporaire généré lors de tes essais) était bien créé ?

Le répertoire upload se trouve bien au même niveau que upload.php , donc dans /home/admiplus/domains/admiplus.fr/public_html/ ?

Lien vers le commentaire
Partager sur d’autres sites

Merci d'une réponse aussi rapide...

Oui pour ta première question,

Oui pour ta seconde question,

Et si j'ai pensé que cela pouvait venir des chmods, c'est que cela fonctionne en local, donc sans chmods, avec ou sans fonction de retour et ne fonctionne que sans fonction de retour une fois sur le serveur de mon hébergeur qui lui nécessite ces :mad2: de chmods...

Je précise que je si on me fait une autre proposition pour une redirection sur la page html, je la prendrais avec plaisir, je ne tiens pas du tout à ma solution qui ne fonctionne pas...

Lien vers le commentaire
Partager sur d’autres sites

Fais un essai en remplaçant au début de ton script la ligne

$dossier = 'upload/';

par

$dossier = './upload/';

voire par

$dossier = '/home/admiplus/domains/admiplus.fr/public_html/upload/';

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...