begin process at 2010 03 22 10:33:17
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

Divers

 > 

Aide & documentation

 > 

demande d'aide pour optimisation de mon script


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

demande d'aide pour optimisation de mon script

dimanche 27 mai 2007 à 17:58:45 | demande d'aide pour optimisation de mon script

darknessneo

Bonjours à tous.
Voila, j'ai fait un script en partant de rien. Mes connaissances en php sont très... bref...
après plus de 1 semaine de galère voici ce que j'ai pondu...
pour info:
il s'agit d'un script qui va:
afficher une liste de répertoires dans un include d'une page quelconque.
chaque lien dirigera vers une page index dans le répertoire selectionné (toujours dans le meme include de la page ou sera appelé la liste)
la page index va afficher toutes les images présentes dedans en miniature, avec un nombre x d'images par lignes, et Y colonnes par page.

Voila, c'est une description très sucsinte de mon script...
il en existe évidement des tomes, des galeries photos, mais moi j'en voulais une que l'on puisse integrer tranquillement à n'importe quelle page web dans un tableau via un include. Hors la plupart des scripts que j'ai trouvé étaient tous trop perfectionnés, soit en imitant l'explorateur windows, soit en ayant des fonctions tellement customisés, que la moindre modification de l'affichage rendait toute utilisation en dehors de la page index incluse dans le script que mes pages web en devaient anarchiques.

Donc voici mon script...

Premiere page...
Enfaite la premiere page est la votre. Imaginons qu'il s'agisse de la page... bidon.php
Dans cette page un include vers la page explorermanga.php

dans cette page explorermanga nous mettrons donc ceci:
<tr>
<td colspan="3" id="borduretitre"><h1>Liste des MANGAS disponible</h1></td>
</tr>
<tr>
<td height="21" id="bordure"></td>
</tr>
<tr>
<td colspan="3" id="tableau" align="center">
<?php
function filelist ($startdir="./", $searchSubdirs=1, $directoriesonly=0, $maxlevel="all", $level=1) {
$ignoredDirectory[] = ".";
$ignoredDirectory[] = "..";
$ignoredDirectory[] = "_vti_pvt";
$ignoredDirectory[] = "_vti_cnf";
$ignoredDirectory[] = "_private";
global $directorylist;
if (is_dir($startdir)) {
if ($dh = opendir($startdir)) {
while (($file = readdir($dh)) !== false) {
if (!(array_search($file,$ignoredDirectory) > -1)) {
if (filetype($startdir . $file) == "dir") {
$directorylist[$startdir . $file]['dir'] = 1;
$directorylist[$startdir . $file]['name'] = $file;
}}}
closedir($dh);
}}
return($directorylist);
}
$files = filelist("images/",1,1); //ici le dossier qu'on scan est le dossier images/
foreach ($files as $list) {
echo "<a href=?page=images/" . $list['name'] . "/index>" . $list['name'] ."</a><br>";
}?>
</td>
</tr>

le but dans cette page, est de lister tout les sous-répertoires d'un dossier précis
le but étant de ce retrouver avec uen liste de liens dont le nom est celui des dossiers
qui seront sur mon site des noms de manga.

Quand nous cliquerons sur un des liens, nous afficherons alors une page index qui se trouvera
dans chaque dossier image
cette page index aura pour mission de s'occuper des miniatures de chaque image (jpg, gif et png)
elle s'occupera aussi de genrer un nombre X de page suivant le nombre d'images du dossier et le
nombre max d'images que l'on affichera par page.
Nous afficherons également la taille, l'extension, et aussi la résolution de l'image.

voici donc la page index.php:

<table align="center"><tr>

<?php
$totalimg = 0;
$page = str_replace('index', '', $_GET['page']);
// on recupere le chemin du fichier index et on enleve index du nom pour en avoir que le chemin repertoire
$dir = $page;
if (is_dir($dir)) {
if ($dh = opendir($dir)) {
while (($file = readdir($dh)) !== false) {
$totalimg ++;
}}
closedir($dh);
}
$totalimg = $totalimg - 4;
if (isset($_GET['id'])) // le id permet de faire savoir à la page index quelle page on affiche
$id = $_GET['id'];
else
$id = 1; // si l'id ne contient rien, il s'agit alors de la premiere page
$lmax = 5; // nombre d'image par ligne
$hmax = 4; // nombre de colonnes max par page
$nbpagemax = ceil($totalimg / ($lmax * $hmax)); //on calcul le nombre de page max
function miniature($picture,$rep,$fext) // début de la fonction qui genere les miniatures
{
if (file_exists($rep . "tb/mini_" . $picture) == false) {
if ($fext == "jpg") { $source = imagecreatefromjpeg($rep . $picture);}
elseif ($fext == "gif") { $source = imagecreatefromgif($rep . $picture);}
else { $source = imagecreatefrompng($rep . $picture);}
$destination = imagecreatetruecolor(200, 150); // On crée la miniature vide
$largeur_source = imagesx($source);
$hauteur_source = imagesy($source);
$largeur_destination = imagesx($destination);
$hauteur_destination = imagesy($destination);
imagecopyresampled($destination, $source, 0, 0, 0, 0, $largeur_destination, $hauteur_destination, $largeur_source, $hauteur_source);
imagejpeg($destination, $rep . 'tb/mini_' . $picture);
}
} //fin de la fonction
$page = str_replace('index', '', $_GET['page']);
// on recupere le chemin du fichier index et on enleve index du nom pour en avoir que le chemin repertoire
$dir = $page;
if (file_exists($dir . "tb/") == false) { //on verifie ensuite si on possede un dossier tb dans le dossier image
mkdir ($dir . "tb/", 0777); // si ce nest pas le cas, on creer le dossier
}
if ($id > 1)
$nombreimage = ($id - 1) * ($lmax * $hmax);
//si ID est superieur a 1 on reprend le compte de la variable la ou elle en etait
else
$nombreimage = 0;
$verifnbimg = 0;
$intervalle = 0;
$nbligne = 0;
$nbpage = 1;
// 2 a la variable, ce qui correspond au fichier index et le repertoire tb, attention tout de meme a ne pas avoir de fichier thunbs.db dans
//le repertoire sous peine de fausser le compte
if (is_dir($dir)) {
if ($dh = opendir($dir)) {
while (($file = readdir($dh)) !== false) {
$ext= explode('.',$file); // on recupere l extension du fichier en prenant la derniere chaine de texte apres le dernier point du fichier
$ext=array_pop($ext);
if ($ext == "jpg" OR $ext == "gif" OR $ext == "png"){
// si l extension est une image alors on excute la partie de code qui suit
if ($nbligne !== $hmax AND $verifnbimg == $nombreimage AND $nombreimage <= $id * ($lmax * $hmax)) {
//on verifie qu on affiche bien les images en fonction de la page
miniature($file, $dir, $ext);
// on verifie avec la fonction que la miniature du fichier existe, sinon on la creer
//les lignes qui suivent affiches les miniatures, son nom, son extension et sa taille
if ($ext == "jpg") { $source = imagecreatefromjpeg($dir . $file);}
elseif ($ext == "gif") { $source = imagecreatefromgif($dir . $file);}
else { $source = imagecreatefrompng($dir . $file);}
echo "<td width=170 align=center>
<a href=" . $dir . $file . " target=_blank>
<img src=" . $dir . "tb/mini_" . $file . " width=150 height=100 border=0></a>
<br><img width=30 height=30 src=images/" . $ext . ".png>
Nom: " . str_replace("." . $ext, '', $file) . "
<br> taille : " . ceil(filesize($dir . $file)/1000) . " Ko<br>
" . imagesx($source) . " x " . imagesy($source) . "</td>";
//fin de l affichage des miniatures
if ($nombreimage < $totalimg) {
$nombreimage ++;
}
$intervalle ++;
// cette ligne permet de passer a la colonne suivante apres avoir affiche x images
if ($intervalle == $lmax) { $nbligne ++; echo "</tr><tr>"; $intervalle = 0; }
}
$verifnbimg ++;
}}
closedir($dh);
}
}
// maintenant on va creer autant de page qu'il faudra pour afficher toutes les images
if ($nbpagemax > 1) {
// si le nombre d image ne depasse pas le nombre max par page il est inutile d afficher les pages
echo "<tr><td align=right colspan=" . $lmax .">Pages";
while ($nbpage < $nbpagemax) {
echo " <a href=?page=" . $dir ."index&amp;id=" . $nbpage . ">" . $nbpage . ",";
$nbpage++; }
echo " <a href=?page=" . $dir ."index&amp;id=" . $nbpage . ">" . $nbpage; }
// on repete encore une fois l instruction avant d afficher la
// derniere page pour eviter de mettre la , a la fin du dernier numero
echo "<tr><td align=right colspan=" . $lmax .">
images : " . $nombreimage . "/" . $totalimg . "</td></tr>";
//petit plus, on affiche combien d'image est affiché par rapport au nombre max du dossier
?>
</tr></table>

Voila. Donc, il s'agit d'un script lourd, je tiens à noté aussi que je voulais utiliser glob() sur la page index pour récuperer le nombre d'images du dossier,
mais malheureusement les servers ont vérouillés cette fonction par sécurité. Du coup j'ai du faire un listing avec les opendir, etc etc.
Vous remarquerez aussi que j'ai fais un petit calcul un peu hazardeux avec $totalimg, en effet, j'ai soustrait 4 à cette valeur comme ceci:

$totalimg = $totalimg - 4;

la raison de ceci, est que dans le dossier image qu'on choisi, il y aura le répertoire tb des miniatures (ca fait 1)
la page index.php elle meme (ca fait 2)
ainsi que deux répertoire? s'appelant . et .. (ca fait 4)

Je vais refaire le scan de fichier en rajoutant la partie qui controle l'extension du fichier, ainsi je n'aurais plus ce probleme. Je vais le faire meme de suite...

voila c'est fait, j'ai simplement rajouté la meme partie plus bas, qui récupere l'extension du fichier et qui verifie que c'est bien un jpg, gif ou png, si c'est bien le cas, on rajoute 1 a la valeur. Je ne vais pas le modifier ici car cela ne change pas grand chose enfaite.

Maintenant je voudrais savoir comment optimiser ce script pour qu'il soit propre. Je ne veux pas qu'on me change l'orientation de mon script en me proposant d'autres fonctions, ou qu'on me rajoute des mods, je veux qu'on aide a épurer mon script.

Sinon, a la rigueur, la seule chose que je voulais rajouter, c'est le nombre de hits par images. Mais là c'est trop hard pour moi avec mon niveau basique du php et de mysql...


dimanche 27 mai 2007 à 18:20:00 | Re : demande d'aide pour optimisation de mon script

zut69

bravo, c est bien fait, mais pour le nombre de hits, si tu veux pas t embeter avec du sql tu peux faire avec des fichiers txt si jamais, tu crée un fichier nom-image.txt dont le titre est le nom de ton image et qui contient juste une valeur, le nombre de hits, a chaque clique tu fais +1 c est pas bien compliqué.
dimanche 27 mai 2007 à 22:32:09 | Re : demande d'aide pour optimisation de mon script

darknessneo

salut, merci pour le compliment, franchement, vu le nombre d heure que j ai passé dessus ca fait plaisir.
Pour les hits, il n y a que deux solutions, ou un fichier text, ou le sql... mais...
je vais publier des galeries d images de plus de 1000 images... je me vois mal generer 1000 fichiers textes sur mon site... c'est plus rapide que de passer par le sql et plus sur aussi... mais c'est tellement plus embetant...

je pense que je vais oculter les hits. Ce n'était qu un plus de toute facon. J'ai réussi a faire ce que je voulais c'est le plus important.


Cette discussion est classée dans : page, file, source, index, dir


Répondre à ce message

Sujets en rapport avec ce message

Index of / EasyPhp [ par jnbrunet ] Salut,dans le dossier 'www' dans easyphp, se trouve une page nommé index.php....si on la supprime, lorsqu'on se connect a notre LocalHost, il nous pré recherche simultanée sur plusieurs table [ par dodji_phpcs ] J'ai ecrit un petit script qui permet rechercher des données dans une table X à partir d'un mot clef entre dans un formulaire et les resultat s'affich Faille de securité [ par drebin78945 ] bonjour,j'aurais besoin de votre avis eclairé...sur mon site, j'ai un index unique (pages de type index.php?pid=..=) associé à une fonction link.inc.p probleme d'ouverture de pages [ par remir ] bonjour, j'ai creer une page perso (ftp,album photos) sur le serveur d'alice. lorsque je l'utilise mes liens ne s'ouvre pas toujours systematiquement lister serveur + stocker BD [ par gabule ] Salut tout le monde, je voudrai lister mon serveur ( rep + fichiers), rentrer ds le fichiers et les lister (bref tout quoi)et stocker cette arborescen Explorateur avec lien download [ par rvkimuz ] Bonjour. Dans cet explorateur, comment rajouter un lien de t¨¦l¨¦chargement de fichier comme sur www.takeoff.fr page download.Voici le script:Et voici Boucle + liste de fichier [ par maximefranck ] Bonjour ,   j'aurai encor besoin de votre aide ...j'ai cree un code  pour  diviser un  mon de fichier , je  m'explique  dans le repertoire ***** il y intégration d'un site dans une page PHP [ par David_monchy ] Bonjour à tous,J'ai créé un site, dans lequel je passe entre les pages des paramètres.(exemple: www.monsite.com/index.php?a=1&b=2)Maintenant, je voudr Problème : Notice: Undefined index [ par dalma101 ] Salut, je recode mon site dont voici un morceau de la première page "index.php" : Code PHP fonctionne pas. [ par charrier63 ] Bonjour a tous, j'essai desperement de copier un code php ou recuperer un code php tout fait dans les zip du site. Le code php recherché, est dans le


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,858 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales