begin process at 2012 02 11 01:42:28
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Graphique

 > PRÉCHARGER TOUTES LES IMAGES D'UN RÉPERTOIRE

PRÉCHARGER TOUTES LES IMAGES D'UN RÉPERTOIRE


 Information sur la source

Note :
10 / 10 - par 1 personne
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Graphique Niveau :Débutant Date de création :11/06/2004 Date de mise à jour :27/08/2004 14:08:08 Vu :12 090

Auteur : arnal69130

Ecrire un message privé
Site perso
Commentaire sur cette source (20)
Ajouter un commentaire et/ou une note

 Description

Cette fonction permet par exemple de précharger toutes les images d'un site (boutons, survols, etc...), pour peu que toutes ces images soient dans un même répertoire.

Il s'agit tout simplement de parcourir le répertoire, et d'extraire les noms des fichiers image afin des les précharger à l'aide des CSS et de la propriété display:none.

La fonction attend en paramètre le chemin (absolu ou relatif) du répertoire, par exemple : preload("images/boutons/");

Source

  • <?php
  • function preload($rep)
  • {
  • chdir("$rep");
  • $dossier=getcwd();
  • //Compatibilité path Unix et windows
  • if (strpos($dossier,"\\")) {$dossier.="\\";}
  • else {$dossier.="/";}
  • if ($handle = @opendir($dossier))
  • {
  • //boucle de parcours de tous les éléments du répertoire
  • while (($file = @readdir($handle)) !== false)
  • {
  • if (@getimagesize("$rep/$file")) //renvoi FAUX si le fichier n'est pas une image
  • { $img[] = "<img src='$rep/$file' style='display:none;' alt='' />\n"; }
  • }
  • }
  • @closedir($handle);
  • return $img;
  • }?>
  • Appel : <?php $tabImg=preload("img"); ?>
  • Puis, <?php foreach($tabImg as $i) echo $i; ?>
<?php
function preload($rep)
{
  chdir("$rep");
  $dossier=getcwd();
  //Compatibilité path Unix et windows
  if (strpos($dossier,"\\")) {$dossier.="\\";}
  else {$dossier.="/";} 

  if ($handle = @opendir($dossier))
  {
   //boucle de parcours de tous les éléments du répertoire
   while (($file = @readdir($handle)) !== false)  
   {
       if (@getimagesize("$rep/$file")) //renvoi FAUX si le fichier n'est pas une image
       { $img[] = "<img src='$rep/$file' style='display:none;' alt='' />\n"; }
   }
  }
  @closedir($handle);
  return $img;
}?>

Appel : <?php $tabImg=preload("img"); ?>
Puis, <?php foreach($tabImg as $i) echo $i; ?>

 Conclusion

Le preload en CSS est inspiré de ce très bon site : http://www.alsacreations.com/articles/preload/

.. .Petite correction suggérée, à juste titre, par R@f  ;o)


 Historique

27 août 2004 14:08:08 :
Modif suite aux suggestions de koko et Bahanix : - path unix / windows - la fonction renvoie un tableau - utilisation de getimagesize, pour fonctionner avec plus d'extensions images.

 Sources du même auteur

Source avec Zip Source avec une capture CALENDRIER : ASSISTANT DE SAISIE DE DATE DANS UN FORMULAIRE
Source avec une capture HACHURES
Source avec une capture "LA PAGE NE PEUX PAS ÊTRE ACTUALISÉE SANS LE RENVOI D'INFORM...
Source avec Zip Source avec une capture DÉGRADÉ

 Sources de la même categorie

Source avec Zip Source avec une capture CAMEMBERT BD par dardelphi
Source avec une capture AMÉLIORATION : CAMEMBERT par asphator
GESTION DE COULEUR par manuche
Source avec Zip NAVIGATOR (+CSSDETECTOR) par xXVoxPopuliXx
COMMENT, AVEC GD, DESSINER UN RECTANGLE TRANSPARENT PLEIN AV... par Rainbow

Commentaires et avis

Commentaire de coockiesch le 11/06/2004 16:28:26

Salut!
Ca à l'air sympa!
Je pense que la création de l'array est à factoriser et éventuellement à éviter: Si c'est pour trois tests, autant faire des if, c'est plus rapide, je pense ;-)

@++

R@f

Commentaire de koko le 12/06/2004 01:14:30

je n'aime pas les fonctions qui affiche directement quelques choses et j'aime bien les tableaux :D

alors :
$img[] = "&lt;img src='$rep/$file' style='display:none;' alt='' /&gt;\n";
a la place de
echo "&lt;img src='$rep/$file' style='display:none;' alt='' /&gt;\n";

return $img;

apres un foreach pour parcourir le tableau !

sinon je ne sais pas si c'est vraiment comme cela que l'on précache des images

&lt;SCRIPT LANGUAGE="JavaScript"&gt;
i1 = new Image;
i1.src = "images/monimages.gif";
&lt;/SCRIPT&gt;

par exemple pour précacher des images !

Commentaire de matrey le 12/06/2004 21:30:42

passer par le CSS c'est pas mal mais c'est pas super "propre", comme aucune autre manière d'ailleurs... :D

Commentaire de Bahanix le 08/08/2004 15:03:56

J'ai un peu simplifié le code :

<?php
$rep="img/";
chdir("$rep");
$dossier=getcwd()."/"; // Correction d'un erreur
$handle = opendir($dossier);
while ($file = readdir($handle)) // False inutile à mes connaissance
{
  $ext=strtolower(substr($file,-3));
  if ( ($ext=="gif") || ($ext=="png") || ($ext=="jpg") )
    { echo "<img src='$rep/$file' style='display:none;' alt='' />\n"; }
}
closedir($handle); // Pourquoi mettre un @ ?
?>

Commentaire de arnal69130 le 27/08/2004 13:54:06

Mersi Bahanix pour tes suggestions, toutefois j'ajouterais quelques précisions :

1./ L'emploi du "\\" n'était pas une erreur, mais une spécificité Windows. Pour plus de compatibilité remplacer
« $dossier=getcwd()."\\"; //pour avoir le chemin complet du répertoire »
par  
« $dossier=getcwd();
   if (strpos($dossier,"\\")) {$dossier.="\\";}
  else {$dossier.="/";} »
Ainsi les path contenant des "\"(Windows) seront complétés par des "\", et les path unix seront complétés par des "/".

2./ Selon http://www.php.net/manual/fr/function.readdir.php, le FALSE n'est pas inutile :

/* Ceci est la façon correcte de traverser un dossier. */
   while (false !== ($file = readdir($handle)))
   { echo "$file\n"; }

/* Ceci est la MAUVAISE façon de traverser un dossier. */
   while ($file = readdir($handle))
   { echo "$file\n"; }

3./Le "@" permet d'éviter l'affichage d'éventuelles erreur lors de l'ouverture et de la fermeture du répertoire, par exemple si les droits sont insuffisants.

Arno

Commentaire de Bahanix le 27/08/2004 17:20:27

C'est interressant merci pr l'info ;)
ceci dit je me demande si cela change réelement le script (en rapidité peut etre ?) entre la "bonne" et "mauvaise" facon du parcour du repertoire :-/

Commentaire de orsam le 10/12/2004 23:54:07

Bonjour à tous,

je trouve ce code trés sympa, c'est exactement ce que je cherche. cependant etant débutant en PHP, j'ai un probleme pour faire une redirection suite à cette source. A la fin du Code j'ai simplement mis header("Location: pagesuivante.php"); et j'obtiens une erreur ! alors comment peut on demander une redirection APRES que le traitement soit terminé ??

Merci à tous et à bientot !

Commentaire de Bahanix le 11/12/2004 09:58:15

C'est normal toutes les "header" doivent être placés en premiere ligne ;-)

Contourne le probleme en plaçant ça ou tu veut :
<script laguage="javascript">window.location="http://www.tonsite.com/pagesuivante.php"</script>

++

Commentaire de Bahanix le 11/12/2004 09:59:20

Rah ca c'est mal affiché :-(
je reécrit :

<script laguage="javascript">
window.location="http://www.tonsite.com/pagesuivante.php"
</script>

Ca devrait fonctionner...

Commentaire de orsam le 11/12/2004 11:40:14

Bonjour,

voici ma premiere page :

Commentaire de orsam le 11/12/2004 11:45:58

Oups désolé :

<FORM ENCTYPE="multipart/form-data" ACTION="" METHOD="POST">
<font face="Verdana" size="2">
<INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="350000">
Envoyer le fichier : <INPUT NAME="Fichier" TYPE="file">
<INPUT TYPE="submit" VALUE="Envoyer">
</font></FORM>
<script laguage="javascript">
window.location="http://www.tonsite.com/pagesuivante.php"
</script>
<?php
$repertoire = "jaquettes";
if ($Fichier && $Fichier != "none") {
copy($Fichier, $repertoire."/"."jaquette_".$HTTP_GET_VARS['num'].".jpg");
}
?>

ce qui permet aux visiteurs d'ajouter des photos sur mon serveur. le probleme c'est que quand je met ton script java, il ne s'arret pas au formulaire d'envoie de fichier et passe à la suite ! donc maj de la base de données. j'espere etre claire dans mes explications.

Merci pour ton aide... Orsam

Commentaire de Bahanix le 12/12/2004 14:25:50

Voici mon script d'upload :

<form onsubmit="envoyer.disabled='disabled';envoyer.value='Patientez';" method="post" enctype="multipart/form-data">
<input type="file" name="userfile">
<br /><input type="submit" value="Upload !" name="envoyer">
</form>
<?php
$max=200*1000;
$ptjpg=explode(".",$_FILES["userfile"]["name"]);

// VERIFIE LA VALIDITé DU FICHIER
if(!file_exists($rep.strtolower($_FILES["userfile"]["name"])) && isset($_FILES["userfile"]) && strlen($_FILES["userfile"]["name"])>4 && strlen($_FILES["userfile"]["name"])<=23  && ($ptjpg[1]=="jpg" || $ptjpg[1]=="JPG" || $ptjpg[1]=="gif" || $ptjpg[1]=="GIF") && $_FILES["userfile"]["size"]>0 && $_FILES["userfile"]["size"]<$max)
{
  // UPLOAD...
  $nom=strtolower($_FILES['userfile']['name']);
  $savefile=$rep.$nom;
  $temp=$_FILES["userfile"]["tmp_name"];
  move_uploaded_file($temp, $savefile);
  $ok=true;
  echo "<script language=\"JavaScript\">alert('Upload achevé avec succès !')</script>";
}
// GESTIONNAIRE DERREURS
if($userfile){
  if(!$ok && file_exists($rep.strtolower($_FILES["userfile"]["name"])))echo "<script language=\"JavaScript\">alert('Ce nom existe déjà')</script>";
  if(!$ok && !isset($_FILES["userfile"]))echo "<script language=\"JavaScript\">alert('Ce n\'est pas un fichier')</script>";
  if(!$ok && strlen($_FILES["userfile"]["name"])<1)echo "<script language=\"JavaScript\">alert('Le nom de ce fichier est trop court')</script>";
  if(!$ok && strlen($_FILES["userfile"]["name"])>23)echo "<script language=\"JavaScript\">alert('Le nom de ce fichier est trop long')</script>";
  if(!$ok && $_FILES["userfile"]["size"]<5)echo "<script language=\"JavaScript\">alert('Ce fichier est vide')</script>";
  if(!$ok && $_FILES["userfile"]["size"]>$max)echo "<script language=\"JavaScript\">alert('Ce fichier est trop volumineux')</script>";
  if(!$ok && $ptjpg[1]!="jpg" && $ptjpg[1]!="gif")echo "<script language=\"JavaScript\">alert('Ce fichier n\'est pas dans le format jpg')</script>";
}
?>


Je vois pas pk tu veut redirigé... ou sinon tu met le script de redirection tt a la fin, après lupload, a l'interieur du IF

Commentaire de orsam le 16/12/2004 00:16:52

PARFAIT !!!

ca marche !!!

Merci beaucoup ! et surement à bientot !

Commentaire de Bahanix le 16/12/2004 12:54:33

De rien ce fut un plaisir ;-)
Moi j'utilise l'upload pr ma galerie d'image http://rpgisland.free.fr

Commentaire de bloxan56x2 le 05/02/2008 17:00:45

Bonjour
je début, création site internet.
J'ai environ 380 images à mettre sur le site, répartit sur 28 pages.
Comment faire, j'ai bien lu depuit le début ( PRÉCHARGER TOUTES LES IMAGES D'UN RÉPERTOIRE )
Mais le script et changer à chaque commentaire.
Qui peut donner un coup de main, me faire un script.
Merci pour votre réponse et à bientot

Commentaire de arnal69130 le 05/02/2008 17:25:24

Bonjour Bloxan56x2,
Le script a été mis à jour au fur et à mesure que des commentaires ont été postés. Il fonctionne tel quel.
Quel est ton problème ? As-tu un message d'erreur ?

Commentaire de bloxan56x2 le 06/02/2008 14:40:32

Bonjour Arnal69130
Mon probléme, je résume.
1 ) Je copie tout le script dans ma page d'aceuil oui ou non ?
2 ) Dans le script il y a 24 lignes, laquel je modifi ?
3 ) Quel n° de ligne et par quoi ?
4 ) Faut-il renommé tout mes images en "img" ? sacahant que j'ai: exemple = voitures.jpg, figurines.jeg ect.. environ 380 images

Commentaire de arnal69130 le 06/02/2008 16:43:50

Le mieux, pour avancer un peu tout seul, c'est d'essayer !

-> oui, tu mets le script dans ta page d'accueil
-> rien à modifier dans la fonction
- Comme indiqué dans la description du code « La fonction attend en paramètre le chemin (absolu ou relatif) du répertoire, par exemple : preload("images/boutons/"); » Donc "img" c'est le nom du répertoire.

Commentaire de Dahorn le 24/06/2009 11:18:54

Bonjour.

Alors voila:(Je débute en html/php) J'ai une image et dessus j'ai positionné plusieurs cadres de lien (sur les differents objets de l'image) lorsque l'on passe la souris sur un de ces cadres lien, une nouvelle image viens prendre la place de la premiere.

Je fais ca avec du Java-script :

function menu(val)
{
if(val=='contacts')
{
y = document.getElementById('encartimage').className='contacts';
}
        else if(val=='none')
{
y = document.getElementById('encartimage').className='encarimage';
}
}
(il y a plusieurs if() normalement, c'est juste pour montrer le fonctionnement)

Les liens vers les images sont dans mon fichier css.

Mon probleme:
Lorsque je passe sur le cadre lien, la nouvelle image remplace bien comme il faut l'ancienne, mais il y a un temps de chargement, du coup j'ai un flash blanc, puis la nouvelle image s'affiche... autant sous firefox que sous IE (l'avantage de firefox c'est qu'il ne charge l'image qu'une seul fois.).

J'ai intergré la fonction preload dans mon code avec un include :

<?php
include ('prechargement.php'); //dans le meme répertoire que mon index.php
$rep=('imagesBureau/');
preload($rep);
?>

Je place ceci avant ma balise <html>

Je lance ca en local, mais aucun changement j'ai toujours les flashs blancs :s

Quelqu'un a une idée ?

Commentaire de Dahorn le 24/06/2009 11:57:54

En faite c'est bon, j'ai trouvé une autre solution en Java-script :

//Préchargement des "images halo".
i0 = new Image();
i0.src = "imagesBureau/bureauOriginal.jpg";

i1 = new Image();
i1.src = "imagesBureau/formationsHalo.jpg";
  
        i2 = ...
Tout bete, et ca marche tres bien ! ^^

Merci quand meme.

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

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 : 3,151 sec (3)

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