Toujours sur ma galerie photo, je cherches à résoudre les erreurs qui arrivent au fur et à mesure.
J'ai toujours ce souci de chmod mais qui à évolué.
La problématique
Le script dont le code sera affiché plus bas est censé en fonction de certaines conditions créer un dossier "mini" si celui n'existe pas. La fonction mkdir est censé lui imposer un chmod par défaut à 777. Par la suite le script scan les images du dossier racine, créer les miniatures et les place dans le dossier "mini".
Le souci est le suivant, si le dossier mini est créé en 755, les images miniature généré ont un chmod de 644 ce qui rend impossible l'effacement de ces dernières. Si le dossier mini est en 777, alors les miniature créés ont un chmod permettant l'effacement depuis un client ftp.
Logiquement aucun souci me direz vous puisque lors de la création du dossier je spécifie le chmod à 777.
Et bien non, lorsque le dossier "mini" est crée son chmod est à 755.
Le script
require('../inc/config.php'); $sql = "SELECT dossier FROM gal_nom WHERE id = '" . $_POST['chemin_dossier'] . "'"; $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); $donnees = mysql_fetch_array($req);
// On selectionne le dossier à scanner $chemin_dossier = '../img/galerie/' . $donnees['dossier'];
// VERIFICATION EXISTENCE DOSSIER MINI $dir = $chemin_dossier . '/mini'; echo'dir = ' . $dir . '<br/>'; $dossier_mini = opendir($dir);
if($dossier_mini != false/* et si le nombre de miniatures correspponds au nombre d'image */) { //On vérifie si le nombre d'image du dossier correspond bien au nombre de mini
//Alors on laisse tranquille et on affiche un message echo'<p class="information">Le dossier mini existe déjà ainsi que les miniatures de vos images</p>'; }
else { if(isset($_POST['chemin_dossier'])) { //On créer le dossier mini mkdir($dir, 0777); echo'dossier créé (chmod 0777)<br/>'; } else { echo'<p class="information">Veuillez sélectionner une galerie</p>'; }
if($handle = opendir($chemin_dossier)) { while(false !== ($file = readdir($handle))) { // On enlève les informations que l'on ne veut pas rentrer dans le tableau (le dossier mini, et les renvois aux // niveaux supérieurs . et ..) if($file != "." && $file != ".." && $file != 'mini' && $file != '.DS_Store') {
// CREATION DES IMAGES MINIATURES (en fonction de leur dimension, conservation des proportions)
// On établie une variable ayant le chemin relatif de l'image à miniaturiser $chemin_image = $chemin_dossier . '/' . $file;
// On extrait les dimensions de l'image list($largeur, $hauteur) = getimagesize($chemin_image);
// On compare hauteur et largeur pour connaitre la plus grande valeur (on soustrait largeur à hauteur, si $résultat positif alors largeur > hauteur, si $résultat négatif alors largeur < hauteur) $resultat = $largeur - $hauteur;
// Si résultat positif if($résultat >= 0) { // On détermine le coéfficient de proportion de l'image $coefficient_proportion = $largeur / $hauteur;
// On prend l'image source $image_source = imagecreatefromjpeg($chemin_image);
// On créer une image vide à partir de l'image source (1ere valeur x = largeur, 2eme valeur y = hauteur) $image_destination = imagecreatetruecolor(200, 200 / $coefficient_proportion);
// On récupère les dimensions de l'image de destination $largeur_source = imagesx($image_source); $hauteur_source = imagesy($image_source); $largeur_destination = imagesx($image_destination); $hauteur_destination = imagesy($image_destination);
// On créer la miniature
imagecopyresampled($image_destination, $image_source, 0, 0, 0, 0, $largeur_destination, $hauteur_destination, $largeur_source, $hauteur_source);
// On enregistre la miniature dans le dossier mini $chemin_mini = $dir . '/mini_' . $file;
imagejpeg($image_destination, $chemin_mini);
// Travail sur la bdd $image_mini = 'mini_' . $file; // On écrit la requete d'insertion des infos dans la bdd $sql = "INSERT INTO gal_image VALUES('', '" . $id_gal_nom . "', '" . $image_mini . "', '" . $image_mini . "', '')"; // On exécute la requête $req = mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
} }
} }
Si j'enlève la partie qui génère les miniatures, le dossier "mini" à un chmod à 777, si je laisse tel quel, le chmod du dossier "mini" est à 755.
Quelqu'un a t il déjà rencontré ce genre de problème ? Quelqu'un vois une erreur qui m'a échappée ?
un petit up car je n'ai toujours pas trouvé d'ou vient le souci.
création dossier
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.