patricia.b Posté 25 Septembre 2008 Posté 25 Septembre 2008 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...
Dan Posté 25 Septembre 2008 Posté 25 Septembre 2008 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/ ?
patricia.b Posté 25 Septembre 2008 Auteur Posté 25 Septembre 2008 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 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...
Dan Posté 25 Septembre 2008 Posté 25 Septembre 2008 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/';
patricia.b Posté 25 Septembre 2008 Auteur Posté 25 Septembre 2008 Grand merci, cela fonctionne maintenant avec $dossier = './upload/';
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant