Script de galerie : Problème

Discussion dans 'Web, design' créé par MbK_, 27 Septembre 2008.

Statut de la discussion:
Fermée.
  1. Offline
    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?
    MbK_, 27 Septembre 2008
    #1
  2. Offline
    Tifox ou pas
  3. Offline
    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)
    MbK_, 27 Septembre 2008
    #3
  4. Offline
    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.
    Tifox, 27 Septembre 2008
    #4
  5. Offline
    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
    MbK_, 27 Septembre 2008
    #5
  6. Offline
    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 ?
    Tifox, 27 Septembre 2008
    #6
  7. Offline
    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 ;)
    MbK_, 27 Septembre 2008
    #7
  8. Offline
    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
    MbK_, 8 Novembre 2008
    #8
  9. Offline
    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.
    Tifox, 8 Novembre 2008
    #9
  10. Offline
    MbK_ Etudjant
    mince, c'est trop complexe pour moi! Tant pis alors, je me contenterai du désordre :-(

    merci ;)
    MbK_, 8 Novembre 2008
    #10
  11. Offline
    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, 9 Novembre 2008
    #11
  12. Offline
    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;
        }
        else{
            return (
    $a[$tri] > $b[$tri]) ? : -1;
        }
    }


    // TRI DU TABLEAU AVEC LA METHODE
    usort($photos,"cmpTableau");
    Tifox, 9 Novembre 2008
    #12
  13. Offline
    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...)
    MbK_, 9 Novembre 2008
    #13
  14. Offline
    Tifox ou pas
    Un simple boucle qui parcourt le tableau.
    PHP:
    foreach($photos as $photo){
        echo 
    '<img src="'.$dossier.'/'.$photo['name'].'" /><br />';    
    }
    Tifox, 9 Novembre 2008
    #14
  15. Offline
    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;
        }
        else{
            return (
    $a[$tri] > $b[$tri]) ? : -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
    Tifox, 9 Novembre 2008
    #15
  16. Offline
    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
    MbK_, 9 Novembre 2008
    #16
  17. Offline
    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>';
    Tifox, 10 Novembre 2008
    #17
  18. Offline
    MbK_ Etudjant
    Si je fais le print_r ca donne ceci :

    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;
                }
                else{
                    return (
    $a[$tri] > $b[$tri]) ? : -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';  
    MbK_, 14 Novembre 2008
    #18
  19. Offline
    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 ?
    Tifox, 15 Novembre 2008
    #19
  20. Offline
    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
    MbK_, 15 Novembre 2008
    #20
Statut de la discussion:
Fermée.