Déplacement de fichier
- Accueil
- Forum
- Programmation
- PHP
- Déplacement de fichier
salutlacompagnie Le 3 juillet 2016 à 20:29 (Édité le 25 janvier 2019 à 17:51)
Je rencontre actuellement un soucis de déplacement de fichier avec la fonction
move_uploaded_file()
La création du fichier et la verification du contenu fonctionne très bien mais le déplacement du fichier vers la destination plante, j'ai beau chercher, tourner dans touts les sens je ne trouve pas le probleme..
<?php
} else {
// Création du fichier
$fichier = fopen($_POST['filename'],"w");
// Vérification de contenu
if (fwrite($fichier,$_POST['contenu'])) {
echo "Le fichier à été créé avec succès";
} else {
// Erreur
echo "Impossible de créer le fichier";
}
//déplacement du fichier vers la destination
$destination = 'C:/www/monsite/protect/enregistrement';
if (move_uploaded_file($fichier['filename']['contenu'], $destination)) {
echo "Le fichier à bien été déplacé";
}else{
echo "Le fichier n'a pas été déplacé";
}
fclose($fichier);
}
?>
ps: Aller les bleus!!! TheOldNoob Le 4 juillet 2016 à 22:55 (Édité le 1 janvier 1970 à 01:00)
Tu n'a pas besoin de mettre c:/www....
Tu part du principe que tu est dans un dossier qui traite ton formulaire sur ton fichier index.php a la racine de ton site.
Tu souhaite mettre ton image disons dans un dossier qui s'appel img
Tu devra donc définir :
$destination = '/img'
Ton fichier sera donc télécharger et déposer dans ton dossier img
Si par exemple, tu te trouve sur un page qui est déjà dans un dossier. Comme par exemple, un dossier nomé assets. Tu devra donc dans un premier temps sortir de ton dossier avec ../
$destination = '../img'
La tu lui a dis, de sortir du dossier assets, puis de rentré dans le dossier img.
Par contre, bien que ton code peu être fonctionnel, je te déconseil de le mettre sur ton site.
Tu ne fait pas assez de condition, qui vont te permetre de limité et donc protéger ton site.
Par exemple, tu ne limite pas de type mime. Donc n'importe quel type de fichier peu être uploader sur ton serveur.
Ensuite, tu ne limite pas la taille de ton fichier. Si tu a un serveur qui a un espace de 100mo, et qu'un type pour a envie d'uploadé un fichier .mkv de 5GO. Autant dire que ton hébergeur va tiré la gueule 😋
Je te met, un bout de code assez complet, avec les conditions qui vont bien 😀
Je me suis servie de se code pour uploadé l'image de musiciens sur le site d'un groupe de musique.
// Pour commencer, j'instancie les variables dont je vais avoir besoin
$dirlink = "link-default.jpg";
$folder = '../images/'; // création de la variable indiquant le chemin du répertoire destination pour les fichiers uploadés (important : le slash à la fin de la chaine de caractère).
$maxSize = 1000000 * 5; // 5Mo, permet une lecture plus facile de la taille maximum souhaité
if(!empty($_FILES) && isset($_FILES['picture'])) { // Si $_FILES n'est pas vide et qu'il est remplie
if ($_FILES['picture']['error'] == UPLOAD_ERR_OK AND $_FILES['picture']['size'] <= $maxSize) {
$nomFichier = $_FILES['picture']['name']; // récupère le nom de mon fichier au sein de la superglobale $_FILES (tableau multi-dimentionnel)
$tmpFichier = $_FILES['picture']['tmp_name']; // Stockage temporaire du fichier au sein de la superglobale $_FILES (tableau multi-dimentionnel)
$file = new finfo(); // Classe FileInfo
$mimeType = $file->file($_FILES['picture']['tmp_name'], FILEINFO_MIME_TYPE); // Retourne le VRAI mimeType
$mimTypeOK = array('image/jpeg', 'image/jpg', 'image/png', 'image/gif'); // autorise les fichier du type .jpeg .jpg .png et .gif
// A savoir que le image/ n'est en aucun cas le dossier de destination, mais le type mime
if (in_array($mimeType, $mimTypeOK)) { // in_array() permet de tester si la valeur de $mimeType est contenue dans le tableau $mimTypeOK
$newFileName = explode('.', $nomFichier);
$fileExtension = end($newFileName); // Récupère la dernière entrée du tableau (créé avec explode) soit l'extension du fichier
// nom du fichier link au format : zicos-id-timestamp.jpg
$finalFileName = 'musicien-'.time().'.'.$fileExtension; // Le nom du fichier sera donc zicos-id-timestamp.jpg (time() retourne un timestamp à la seconde)
if(move_uploaded_file($tmpFichier, $folder.$finalFileName)) { // move_uploaded_file() retourne un booleen (true si le fichier a été envoyé et false si il y a une erreur)
// Ici je suis sûr que mon image est au bon endroit
$dirlink = $finalFileName;
}
else {
// Permet d'assigner un link par défaut
$dirlink = "link-default.jpg";
}
} // if (in_array($mimeType, $mimTypeOK))
else {
$error[] = 'Ce type de fichier est interdit, mime type incorrect !';
}
} // end if ($_FILES['picture']['error'] == UPLOAD_ERR_OK AND $_FILES['picture']['size'] <= $maxSize)
else {
$error[] = 'Merci de choisir un fichier image (uniquement au format jpg) à uploader et ne dépassant pas 5Mo !';
}
} // end if (!empty($_FILES) AND isset($_FILES['picture'])
else {
// Permet d'assigner l link par défaut si la musicien n'en a aucun
$dirlink = "link-default.jpg";
}
salutlacompagnie Le 6 juillet 2016 à 18:58 (Édité le 1 janvier 1970 à 01:00)
En faite la je récupère toutes les infos entrée par l'utilisateur dans différents formulaires (environs 10) ils peuvent comprendre des textes important ainsi que des images , et enfaite je met tout le contenu dans un dossier et une page qui leur est destiné..
Donc logiquement j'ai pas forcement besoin de le vérifier car je sais qu'il est déjà sécurisé au par avant grâce au formulaire..
Me conseilles-tu de sécuriser encore une fois celui-ci ou de le laisser comme ça?
Merci pour tes réponses depuis le début de mon inscription =)
TheOldNoob Le 6 juillet 2016 à 19:09 (Édité le 6 juillet 2016 à 19:11)
Avec le code que j'ai donné, tu limite surtout la taille et le type des fichiers afin que ne soit pas uploader sur ton serveur, n'importe quel type et n'importe quel taille de fichier. Même, si normalement, les serveur que tu loue limite déjà la taille dans le php.ini
TheOldNoob Le 7 juillet 2016 à 19:17 (Édité le 1 janvier 1970 à 01:00)
content de t'avoir aidé 😉