Erreur inconnue avec move_uploaded_file()
Evenkore
Messages postés
18
Statut
Membre
-
Utilisateur anonyme -
Utilisateur anonyme -
Plop :D
Alors voilà, je voudrais créer un système d'avatars pour mon site. Sauf que voilà, move_uploaded_file() me retourne FALSE dans tous les cas, et je ne vois absolument pas pourquoi :/
Voici mon code :
Help siouplait? :(
Alors voilà, je voudrais créer un système d'avatars pour mon site. Sauf que voilà, move_uploaded_file() me retourne FALSE dans tous les cas, et je ne vois absolument pas pourquoi :/
Voici mon code :
if (isset($_FILES['avatar'])) {
$ds = $_SERVER['DOCUMENT_ROOT'] .'/images/avatars/';
$ext = array('.png', '.gif', '.jpg', '.jpeg');
$exd = strrchr($_FILES['avatar']['name'], '.');
$fc = basename($_FILES['avatar']['name']);
if (!in_array($exd, $ext)) {
header('Location: account.php?al=bf');
} else {
$ms = 40000;
$sz = filesize($_FILES['avatar']['tmp_name']);
if ($sz > $ms) {
header('Location: account.php?al=tl');
} else {
$fc = strtr($fc,
'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
$fc = preg_replace('/([^.a-z0-9]+)/i', '-', $fc);
if(move_uploaded_file($_FILES['avatar']['tmp_name'], $ds . $fc))
{
$upd = $bdd->prepare('UPDATE membres SET avatar = ? WHERE id = ?');
$upd->execute(array('/images/avatars/'.$fc, $_SESSION['id']));
header('Location: account.php?al=dc');
} else {
header('Location: account.php?al=errav');
}
}
}
}
Help siouplait? :(
A voir également:
- Erreur inconnue avec move_uploaded_file()
- Appeler en inconnue - Guide
- Erreur vidéo inconnue freebox révolution - Astuces et Solutions
- Erreur 4101 france tv - Forum Lecteurs et supports vidéo
- Erreur lors de l'enregistrement du contact - Forum Xiaomi
- Iptv erreur de lecture - Forum TV & Vidéo
15 réponses
Tu dis que $_SERVER['DOCUMENT_ROOT'] (je suppose que c'est la variable globale dont tu parles dans ton message #4) te rend "/" et que la racine de ton site, ce n'est pas la racine du disque.
N'y aurait-il pas comme une contradiction ?
N'y aurait-il pas comme une contradiction ?
Bonjour
As-tu testé $_FILES['avatar']['error'] ?
As-tu fait afficher $ds . $fc pour être bien sûr du nom de destination ?
As-tu testé $_FILES['avatar']['error'] ?
As-tu fait afficher $ds . $fc pour être bien sûr du nom de destination ?
/images/avatars/avatar_1.png, soit le bon chemin...
Je me permets (peut-être à tort) d'en douter.
/images est vraiment un répertoire à la racine de ton disque ? Ou à celle de ton site ? Si c'est bien à la racine du disque courant, ok, mais si c'est à la racine de ton site, tu aurais plutôt dû faire :
Car ici, il n'est pas question d'URL, mais de système de fichiers. Donc un chemin qui commence par / est un chemin absolu dans le système de fichiers, pas dans le dossier de ton site.
Je me permets (peut-être à tort) d'en douter.
/images est vraiment un répertoire à la racine de ton disque ? Ou à celle de ton site ? Si c'est bien à la racine du disque courant, ok, mais si c'est à la racine de ton site, tu aurais plutôt dû faire :
move_uploaded_file($_FILES['avatar']['tmp_name'], $_SERVER['DOCUMENT_ROOT ] . $ds . $fc)
Car ici, il n'est pas question d'URL, mais de système de fichiers. Donc un chemin qui commence par / est un chemin absolu dans le système de fichiers, pas dans le dossier de ton site.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
En effet, excuse-moi, j'avais lu trop vite.
As-tu essayé d'afficher $_FILES['avatar']['tmp_name'] et $sz pour voir s'ils semblent corrects ?
As-tu essayé d'afficher $_FILES['avatar']['tmp_name'] et $sz pour voir s'ils semblent corrects ?
J'ose à peine le demander ... tu as bien vérifié l'existence et les droits de lecture/écriture du répertoire /images/avatars/ ? As-tu essayé de créer un fichier dans ce répertoire, avec un script, en faisant un simple fopen ?
Tu l'as créé dans ton FTP ? C'est sur un serveur distant ? Alors la racine de ton site, c'est la racine du disque de ton serveur ? Je me pose de plus en plus de questions.
On doit pouvoir trouver le 'vrai' document_root à partir de __FILE, mais c'est gênant pour la compatibilité avec les scripts 'normaux'
define ('DOCUMENT_ROOT', pathinfo(__FILE__,PATHINFO_DIRNAME ));Tu peux utiliser DOCUMENT_ROOT à la place du $_SERVER['DOCUMENT_ROOT'] habituel de PHP. Attention, le chemin obtenu ne se termine PAS par un "/".
J'ai choisi "define" pour avoir une constante plutôt que de définir une variable $document_root=... car avec une constante, tu n'as pas besoin de mettre global dans toutes les fonctions. Par contre, tu ne peux pas mettre la constante dans une chaîne entre doubles quotes, à toi de voir ce que tu préfères.
define ('DOCUMENT_ROOT', __DIR__);