Script de galerie : Problème

Statut
N'est pas ouverte pour d'autres réponses.

MbK_

Etudjant
Bonjour à tous,

J'ai codé un script de galerie en interne qui fonctionne comme ceci :

par la page admin, "j'ajoute" une galerie ce qui crée automatiquement un répertoire sur le FTP. Dans ce répertoire, je peux uploadé les photos. Lorsqu'elles sont pour la première fois visitées le script crée automatiquement les miniatures.

J'ai ensuite mis le site sur le web et tout fonctionnait bien mais depuis quelques temps, mon script pose problème. En effet, je ne sais plus uploader les photos dans les répertoires qui sont automatiquement crée par le script (alors que j'avais déjà réussi auparavant). La permission m'est refusée.

J'ai alors interrogé le propriétaire du serveur et il m'a répondu que cela était normal vu que le créateur du répertoire était "Apache" et que moi je n'avais pas les droits sur ce dossier.

Avez-vous une idée pour résoudre mon problème? Est-ce que je peux demander au script de me donner les droits?
 
1er
OP
MbK_

MbK_

Etudjant
ma ligne de code est la suivante :

mkdir("galerie/" . $annee . "/" . $new_id, 0777);

Je dois changer quelque chose? Pcq en ce qui concerne le CHMOD, j'ai seulement quelques notions (que je n'ai pas le temps d'approfondir)
 

Tifox

ou pas
Bizarre ça.

Essaye peut-être de rajouter chmod (""galerie/" . $annee , 0777);
Essaye peut-être aussi sans le dernier "/" dans le chmod et mkdir.
Regarde ce que te retourne chmod et mkdir : ça doit retourner TRUE ou 1.
Essaye de voir avec un client ftp les droits et le possesseur du dossier et voir si tu sais les modifier.
Demande au gestionnaire du serveur. Si c'est effectivement un problème de droit et que tu ne sais pas le corriger, il y a un soucis dans sa config.
 
1er
OP
MbK_

MbK_

Etudjant
Le chmod du dossier est de 755 pourtant je demande a mon script de le mettre en 777!

Je vais voir si je peux modifier le chmod par un autre script
 

Tifox

ou pas
quand tu refais un chmod 0777 sur le dossier par après en php, ça te retourne bien TRUE mais tu es toujours en 755 ?
 
1er
OP
MbK_

MbK_

Etudjant
Voila le problème est résolu!

J'ai fait comme tu disais, j'ai rajouté un chmod après le mkdir et ca marche!
Je comprends pas trop pourquoi le mkdir refuse de le mettre directement en 777...

Merci encore une fois a toi ;)
 
1er
OP
MbK_

MbK_

Etudjant
Bonjour à tous,

Je réouvre ce sujet car j'ai un petit soucis qui concerne cette même galerie!

J'affiche les images via un petit script qui liste tous les fichiers .jpg et .png présents dans un dossier spécifique. Le problème est qu'à l'affichage, toutes ces images sont dans le désordre! J'aimerais savoir comment les classer automatiquement par nom (et éventuellement par date mais c'est moins important)

Le script est le suivant :

PHP:
        $donnees = mysql_fetch_array($query);
        // on déclare un tableau qui contiendra le nom des fichiers de nos miniatures  
        $tableau = array();  
        // on ouvre notre dossier contenant les miniatures
        $dossier = opendir ('galerie/'. $donnees['annee'] .'/'. $_GET['id'] .'/mini');  
        echo '<tr>';
        echo  '<td class="catLeft"><span class="catdate"><img src="forum/templates/RedSilver/images/icon_minipost_new.gif"/>&nbsp;'. stripslashes($donnees['evenement']) .'</span></td>';
        echo '</tr>';
        while ($fichier = readdir ($dossier)) { 
           if ($fichier != '.' && $fichier != '..' && $fichier != 'index.php') { 
                 // on stocke le nom des fichiers des miniatures dans un tableau 
              $tableau[] = $fichier; 
           }  
        }  
        closedir ($dossier);  
         // on défini le nombre de colonne sur lesquelles vont s'afficher nos miniatures  
        $nbcol=6;  
        // on compte le nombre de miniatures  
        $nbpics = count($tableau);  
        // si on a au moins une miniature, on les affiche toutes  
        if ($nbpics != 0) { 
           echo '<table align="center">'; 
           for ($i=0; $i<$nbpics; $i++){ 
              if($i%$nbcol==0) echo '<tr>'; 
              // pour chaque miniature, on affiche la miniature munie d'un lien vers la photo en taille réelle 
              echo '<td class="row1"><div align="center"><a href="galerie/' . $donnees['annee'] .'/'. $_GET['id'] .'/'. $tableau[$i] . '" rel="lightbox[all]">';
              echo '<img src="galerie/' . $donnees['annee'] .'/'. $_GET['id'] .'/mini/' . $tableau[$i] . '" alt="Image" />';
              echo '</a></div></td>'; 
              if($i%$nbcol==($nbcol-1)) echo '</tr>'; 
           } 
           echo '</table>';  
        }  
        // si on a aucune miniature, on affiche un petit message :)  
        else echo 'Aucune image a afficher';
Merci de votre aide
 

Tifox

ou pas
J'avais fais une recherche sur la question il y a quelques temps, et je n'ai rien trouvé de concluant pour faire le listing des fichier directement dans le bon ordre. J'ai du lire une première fois tout les fichiers, stocker les infos sur les fichiers dans une liste, puis utiliser la methode qui permet de trier la liste avec un fonction de tri que j'avais écrite.
 
1er
OP
MbK_

MbK_

Etudjant
mince, c'est trop complexe pour moi! Tant pis alors, je me contenterai du désordre :-(

merci ;)
 

Tifox

ou pas
Mais non, c'est pas si compliqué. Juste que ça prend plus de mémoire et de temps de calcul (si tu as 15000 fichiers dans ton dossier, oublie ce système).

Atta, je vais te chercher un code d'exemple (faut que je fouille mes sources).
 

Tifox

ou pas
PHP:
// CREATION DU TABLEAU AVEC LES INFOS SUR LES PHOTOS
$photos;  // var contenant le tableau, chaque ligne contient les infos sur une photo
$handle = opendir("$dossier");  // Ouverture du dossier
readdir($handle);  // passe .
readdir($handle);  // passe ..
while ( $file = readdir($handle) ){
	$photos[$file]['name'] = $file;
	$photos[$file]['size'] = filesize("$dossier/$file");
	$photos[$file]['date'] = filemtime("$dossier/$file");
}


// METHODE DE TRI (Comparaison entre 2 ligne d'un tableau, retourne 0 si egal, -1 si la première est plus petite (avant), +1 si la première est plus grande(après))
$tri = 'date';  // Variable sur quoi on va trier (ici, on pourait avoir name, size ou date)
$ordre = 'DOWN';  // Sens du tri (ASCou DESC)
function cmpTableau($a, $b) {
	global $tri;
	global $ordre;
    if ($a[$tri] == $b[$tri]) return 0;
    if( $ordre == 'DOWN' ){
		return ($a[$tri] < $b[$tri]) ? 1 : -1;
	}
	else{
    	return ($a[$tri] > $b[$tri]) ? 1 : -1;
	}
}


// TRI DU TABLEAU AVEC LA METHODE
usort($photos,"cmpTableau");
 
1er
OP
MbK_

MbK_

Etudjant
j'ai pas plus de 200 photos par dossier donc ca devrait aller je pense... Par contre, pour l'adapter, j'ai un peu du mal. Comment je peux faire pour voir le résultat? (dsl mais je suis pas trop un as...)
 

Tifox

ou pas
Un simple boucle qui parcourt le tableau.
PHP:
foreach($photos as $photo){
	echo '<img src="'.$dossier.'/'.$photo['name'].'" /><br />';	
}
 

Tifox

ou pas
Je n'avais pas vraiment regard ton code, mais en fait, c'est assez facile d'adapter mon exemple car la partie qui crée le tableau est déjà la, ainsi que la lecture de ce tableau.
Avec mes adaptation, ça donnerait donc :

PHP:
$donnees = mysql_fetch_array($query);
// on déclare un tableau qui contiendra le nom des fichiers de nos miniatures  
$tableau = array();  
// on ouvre notre dossier contenant les miniatures
$dossier = opendir ('galerie/'. $donnees['annee'] .'/'. $_GET['id'] .'/mini');  
echo '<tr>';
echo  '<td class="catLeft"><span class="catdate"><img src="forum/templates/RedSilver/images/icon_minipost_new.gif"/>&nbsp;'. stripslashes($donnees['evenement']) .'</span></td>';
echo '</tr>';
while ($fichier = readdir ($dossier)) { 
   if ($fichier != '.' && $fichier != '..' && $fichier != 'index.php') {
   		// ON REMPLACE
   		//$tableau[] = $fichier; 
   		// PAR
   		$tableau[$file]['name'] = $fichier;
	    $tableau[$file]['size'] = filesize('galerie/'. $donnees['annee'] .'/'. $_GET['id'] .'/mini/'.$fichier);
	    $tableau[$file]['date'] = filemtime('galerie/'. $donnees['annee'] .'/'. $_GET['id'] .'/mini/'.$fichier);  
   }  
}  
closedir ($dossier);  

// AJOUT FCT DE TRI ET DES VAR DE TRI
$tri = 'date';  // Variable sur quoi on va trier (ici, on pourait avoir name, size ou date)
$ordre = 'DOWN';  // Sens du tri (ASCou DESC)
function cmpTableau($a, $b) {
    global $tri;
    global $ordre;
    if ($a[$tri] == $b[$tri]) return 0;
    if( $ordre == 'DOWN' ){
        return ($a[$tri] < $b[$tri]) ? 1 : -1;
    }
    else{
        return ($a[$tri] > $b[$tri]) ? 1 : -1;
    }
}

// TRI DU TABLEAU AVEC LA METHODE
usort($tableau,"cmpTableau"); 

 // on défini le nombre de colonne sur lesquelles vont s'afficher nos miniatures  
$nbcol=6;  
// on compte le nombre de miniatures  
$nbpics = count($tableau);  
// si on a au moins une miniature, on les affiche toutes  
if ($nbpics != 0) { 
   echo '<table align="center">'; 
   for ($i=0; $i<$nbpics; $i++){ 
      if($i%$nbcol==0) echo '<tr>'; 
      // pour chaque miniature, on affiche la miniature munie d'un lien vers la photo en taille réelle 
      echo '<td class="row1"><div align="center"><a href="galerie/' . $donnees['annee'] .'/'. $_GET['id'] .'/'. $tableau[$i] . '" rel="lightbox[all]">';
      echo '<img src="galerie/' . $donnees['annee'] .'/'. $_GET['id'] .'/mini/' . $tableau[$i] . '" alt="Image" />';
      echo '</a></div></td>'; 
      if($i%$nbcol==($nbcol-1)) echo '</tr>'; 
   } 
   echo '</table>';  
}  
// si on a aucune miniature, on affiche un petit message :)  
else echo 'Aucune image a afficher';
Note que ça n'a pas été testé, et que si tu veux trier sur autre chose, il faut ajouter ça dans la génération de la ligne du tableau
 
1er
OP
MbK_

MbK_

Etudjant
J'essaye mais ca n'affiche pas d'image. Malheureusement, ca n'affiche pas d'erreur non plus! Et je vois absolument pas d'ou vient l'erreur :D

Ne t'en fais pas pour moi! J'ai pas envie de te pomper ton temps ;)

Merci bcp qd mm
 

Tifox

ou pas
Le code source généré, ça raconte quoi? Il y a peut-être une erreur dans les chemins vers les images.

Tu peux peut-être aussi ajouter ceci avant la boucle pour afficher les images, ça t'affichera le contenu du tableau avec les infos sur les images.
PHP:
echo '<pre>';print_r($tableau);echo '</pre>';
 
1er
OP
MbK_

MbK_

Etudjant
Si je fais le print_r ca donne ceci :

Array
(
[0] => Array
(
[name] => image (9).JPG
[size] => 2149
[date] => 1219269979
)

)
C'est normal qu'il n'y ait qu'une valeur?

Si je ne fais pas le print_r (et meme si je le fais en fait...) ca donne :

PHP:
<table align="center"><tr><td class="row1"><div align="center"><a href="galerie/0708/26/Array" rel="lightbox[all]"><img src="galerie/0708/26/mini/Array" alt="Image" /></a></div></td></table>
ca pose problème :D

Le code est donc le suivant pour le moment :

PHP:
        $donnees = mysql_fetch_array($query);
        // on déclare un tableau qui contiendra le nom des fichiers de nos miniatures  
        $tableau = array();  
        // on ouvre notre dossier contenant les miniatures
        $dossier = opendir ('galerie/'. $donnees['annee'] .'/'. $_GET['id'] .'/mini');  
        echo '<tr>';
        echo  '<td class="catLeft"><span class="catdate"><img src="forum/templates/RedSilver/images/icon_minipost_new.gif"/>&nbsp;'. stripslashes($donnees['evenement']) .'</span></td>';
        echo '</tr>';
        while ($fichier = readdir ($dossier)) { 
           if ($fichier != '.' && $fichier != '..' && $fichier != 'index.php') {
                   // ON REMPLACE
                   //$tableau[] = $fichier; 
                   // PAR
                $tableau[$file]['name'] = $fichier;
                $tableau[$file]['size'] = filesize('galerie/'. $donnees['annee'] .'/'. $_GET['id'] .'/mini/'.$fichier);
                $tableau[$file]['date'] = filemtime('galerie/'. $donnees['annee'] .'/'. $_GET['id'] .'/mini/'.$fichier);  
           }  
        }  
        closedir ($dossier);  
        
        // AJOUT FCT DE TRI ET DES VAR DE TRI
        $tri = 'name';  // Variable sur quoi on va trier (ici, on pourait avoir name, size ou date)
        $ordre = 'DOWN';  // Sens du tri (ASCou DESC)
        function cmpTableau($a, $b) {
            global $tri;
            global $ordre;
            if ($a[$tri] == $b[$tri]) return 0;
            if( $ordre == 'DOWN' ){
                return ($a[$tri] < $b[$tri]) ? 1 : -1;
            }
            else{
                return ($a[$tri] > $b[$tri]) ? 1 : -1;
            }
        }
        
        // TRI DU TABLEAU AVEC LA METHODE
        usort($tableau,"cmpTableau"); 
        
         // on défini le nombre de colonne sur lesquelles vont s'afficher nos miniatures  
        $nbcol=6;  
        // on compte le nombre de miniatures  
        $nbpics = count($tableau);  
        // si on a au moins une miniature, on les affiche toutes  
                echo '<pre>';
        print_r($tableau);
        echo '</pre>';  

        if ($nbpics != 0) { 
           echo '<table align="center">'; 
           for ($i=0; $i<$nbpics; $i++){ 
              if($i%$nbcol==0) echo '<tr>'; 
              // pour chaque miniature, on affiche la miniature munie d'un lien vers la photo en taille réelle 
              echo '<td class="row1"><div align="center"><a href="galerie/' . $donnees['annee'] .'/'. $_GET['id'] .'/'. $tableau[$i] . '" rel="lightbox[all]">';
              echo '<img src="galerie/' . $donnees['annee'] .'/'. $_GET['id'] .'/mini/' . $tableau[$i] . '" alt="Image" />';
              echo '</a></div></td>'; 
              if($i%$nbcol==($nbcol-1)) echo '</tr>'; 
           } 
           echo '</table>';  
        }  
        // si on a aucune miniature, on affiche un petit message :)  
        else echo 'Aucune image a afficher';
 

Tifox

ou pas
Remplace un peu
PHP:
echo '<img src="galerie/' . $donnees['annee'] .'/'. $_GET['id'] .'/mini/' . $tableau[$i] . '" alt="Image" />';
par

PHP:
echo '<img src="galerie/' . $donnees['annee'] .'/'. $_GET['id'] .'/mini/' . $tableau[$i]['name'] . '" alt="Image" />';
En fait, l'url vers l'image était mauvaise et n'avait pas été adaptée au script.

Pour le nombre d'image, il y a bien plus qu'une dans le dossier ?
 
1er
OP
MbK_

MbK_

Etudjant
Alors ca affiche enfin l'image mais une seule... J'ai l'impression que l'array ne considère qu'une seule image.

Donc je n'en affiche qu'une seule alors qu'il y en a plus dans le dossier bien sur
 
Statut
N'est pas ouverte pour d'autres réponses.
Haut