Bonjour,
Je suis entraine de développer un site web. Les gens pourrons personaliser leur page de profil avec des images qui pourons téléversé.
Je me suis fait un uploader type "plupload" (Glisser déposer). Les requête seront envoyer en ajax. Pour tester l'enregistrement en base de donné je me suis fait un formulaire quand je fait enregistré il y a cette erreur qui s'affiche :
Warning (2): move_uploaded_file(/img/uploads/users/backgrounds/1/IMG_0013.JPG.jpg) [function.move-uploaded-file]: failed to open stream: No such file or directory [APP/Model/Background.php, line 69]
Voici la fonction de mon model background.php
public function afterSave($created, $options = array()) {
if (isset($this->data[$this->alias]['background_file'])) {
$file = $this->data[$this->alias]['background_file'];
$extention = strtolower(pathinfo($file['name'], PATHINFO_EXTENSION));
if (!empty($file['tmp_name'])) {
$destination = '/img'.DS.'uploads'.DS.'users'.DS.'backgrounds'.DS.AuthComponent::user('id').DS.$file['name'].'.'.$extention;
debug($destination);
debug(move_uploaded_file($file['tmp_name'], $destination));
$this->savefield("background",$destination);
}
}
}
Merci.
Hum... Il est ajouté après la vérification de l'existence du dossier le nom et l'extension Zil ;)
$destination = IMAGES . 'uploads' . DS . 'users' . DS . 'backgrounds' . DS . AuthComponent::user('id');
if(!file_exists($destination)){
mkdir($destination, 0777, true);
}
$destination .= DS.$file['name'] . '.' . $extention;
move_uploaded_file($file['tmp_name'], $destination);
Ca ne fonctionne toujours pas avec la constante "IMAGES" ?
Désolé, de mon retard. Ça fonctionne avec la constante "IMAGES"
Merci
Le dossier qui va recevoir l'avatar existe ?
Tu devrais rajouter une condition avant pour créer le dossier si il n'existe pas
Effectivement, dans ce cas le dossier n'existe pas, il est donc nécessaire de vérifier avant et de le créer s'il n'existe pas, pour ça rien de bien compliqué:
$destination = '/img'.DS.'uploads'.DS.'users'.DS.'backgrounds'.DS.AuthComponent::user('id');
if(!file_exists($destination)){
mkdir($dest, 0777, true);
}
$destination .= DS.$file['name'].'.'.$extention;
move_uploaded_file($file['tmp_name'], $destination);
Il veut même pas créer le dossier quand je vérifie l'existance du dossier.
if(!file_exists($destination)){
mkdir($destination, 0777, true);
}
Et avec la constante du dossier d'image ? Car théoriquement ça ne pointe pas au bon endroit dans ton cas...
$destination = IMAGES . 'uploads' . DS . 'users' . DS . 'backgrounds' . DS . AuthComponent::user('id');
Salut
debug($destination) pour commencer, voir si ça pointe bien là où tu veux
puis vérifie les droits de ce dossier, au cas où
Le chemin de destination qui commence par /img ça sent pas très bon. Inspirat à raison, utilise la constante IMAGES ou bien WWW_ROOT qui dirige vers vers le webroot.
Oui, tu peux faire un debug(get_defined_constants()); pour voir tous les chemins de tes constantes, tout en bas de la liste
Pour le moment le nom de l'image c'est 1 puisque tu as mis AuthComponent::user('id')
faudrait rajouter un .png