bonjour,
je cherche quelque chose qui va me permettre de pré-charger un dossier rempli d'images..
J'ai trouvé un script dont je n'arrive pas à me servir..
a écrit :
<?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; ?>


Dès que je fais appel à cette fonction, j'ai
a écrit :
Fatal error: Call to undefined function: preload() in /mnt/140/sdb/7/2/.............

Modifié par rockrider (09 May 2010 - 20:01)
merci Mal pour ta réponse,
ce code n'a pas été réalisé par moi... donc c'est un peu du chinois pour moi
je sais juste qu'il faut modifier
a écrit :
preload("img")
selon l'emplacement du dossier.
mon niveau ne me permet pas de trouver l'erreur ou modifier le code.

mais j'ai réussi à déplacer le problème, maintenant j'ai
a écrit :
Warning: Invalid argument supplied for foreach() in /mnt/140/sdb/7/2/......

c'est la dernière ligne du code qui pose problème
a écrit :
<?php foreach($tabImg as $i) echo $i; ?>
Smiley ohwell
Je te conseil d'apprendre les bases du php avant d'en utiliser, sinon tu pourrais exécuter du code nuisible sur ton site. Enfin, voila ta fonction preload en plus économe en ressource:


function preload($dir)
{
	// Si on peut lire le contenu du dossier
	if(is_dir($dir) && is_readable($dir))
	{
		// Scan du dossier images/
		$images = scandir('images', 0);
		// Pour chaque fichier
		foreach($images as $image)
		{
			$tImg = array();
			// on récupère l'extension
			$ext = strtolower(pathinfo($image, PATHINFO_EXTENSION));
			// Si le fichier est une image png, jpg ou gif
			if($ext == 'png' || $ext == 'jpg' || $ext == 'gif')
				$tImg[] = "<img src='$dir/$image' style='display:none;' alt='' />\n";	// Ajout au tableau
		}
		return $tImg;
	}
	else
		return false;
}


Cependant j'ai rien testé, l'appel sera le même (la fonction renverra false si le dossier donné en paramètre est invalide ou inaccessible en lecture). Tu peux aussi ajouter des extensions en fonction du format des images sur lesquels tu travail.
Modifié par mal (09 May 2010 - 21:27)
impressionnant....
en tout cas merci pour tout, je débute dans le php et il me reste encore du chemin à faire.

concernant le script, je l'ai essayé sur Free (comme les autres tentatives), cette fois-ci il me renvoie vers
a écrit :
Fatal error: Call to undefined function: scandir()


et puis je l'ai essayé sur un hébergeur payant, et il n'y a aucune erreur dans les 2 codes, mais malheureusement il ne fonctionne pas Smiley decu , c'est dommage car c'est le seul script que j'ai trouvé et qui répond à mes critères...
Bonjour,

Le code de mal marche très bien Smiley lol , mais ton serveur doit être en php4 est comme scandir() c'est du php5, bè il reconnais pas la fonction.

La même chose pour php4 serait:

function preload($path) 
{ 

    $images = array();
    
    $path = rtrim($path, "/");
    
    if(false !== ($dir=opendir($path)))
    {
        while(false !== ($file=readdir($dir)))
        {
            $ext = strtolower(pathinfo($file, PATHINFO_EXTENSION));
                
            if(in_array($ext,array('jpg','jpeg','png','gif')))
            {
                $images[] = '<img src="'.$path.'/'.$file.'" style="" alt="" />';
            }
        }
        closedir($dir);
    }

    return $images;
} 

Modifié par matmat (10 May 2010 - 02:03)
Modérateur
Et l'eau,

mal a écrit :
Je te conseil d'apprendre les bases du php avant d'en utiliser, sinon tu pourrais exécuter du code nuisible sur ton site. Enfin, voila ta fonction preload en plus économe en ressource:


function preload($dir)
{
	// Si on peut lire le contenu du dossier
	if(is_dir($dir) && is_readable($dir))
	{
		// Scan du dossier images/
		$images = scandir('images', 0);
		// Pour chaque fichier
		foreach($images as $image)
		{
			$tImg = array();
			// on récupère l'extension
			$ext = strtolower(pathinfo($image, PATHINFO_EXTENSION));
			// Si le fichier est une image png, jpg ou gif
			if($ext == 'png' || $ext == 'jpg' || $ext == 'gif')
				$tImg[] = "<img src='$dir/$image' style='display:none;' alt='' />\n";	// Ajout au tableau
		}
		return $tImg;
	}
	else
		return false;
}


Cependant j'ai rien testé, l'appel sera le même (la fonction renverra false si le dossier donné en paramètre est invalide ou inaccessible en lecture). Tu peux aussi ajouter des extensions en fonction du format des images sur lesquels tu travail.


Sans l'exécuter, c'est un script qui donnera qu'une seule occurence et d'une manière générale, il comporte 4 erreurs (2 php, 1 html, 1 css). Donc, je recommande : Avant de vouloir coder dans un langage plus robuste, toujours connaître les bases !

En faisant vite fait, tu devrais trouver chaussure à ton pied.

    $chemin_determine = "chemin_exact".DIRECTORY_SEPARATOR."en_absolu".DIRECTORY_SEPARATOR."ou".DIRECTORY_SEPARATOR."en_relatif".DIRECTORY_SEPARATOR."repertoire_images".DIRECTORY_SEPARATOR; //chemin exact en absolu ou en relatif !
    function lire_repertoire_image($chemin){
        $liste_images = array();
        
        $rep  = dir($chemin);
        while(($entree = $rep->read()) !== false){
            if(preg_match("#\.(jpg|jpeg|gif|png)$#",strtolower($entree))){
                $liste_images[] = "<img src=\"".$chemin.$entree."\" alt=\"".$entree."\" />";
            }        
        }
        $rep->close();
        
        return $liste_images;
    }
    
    foreach(lire_repertoire_image($chemin_determine) as $image){
        echo $image."<br />";
    }


Bonne journée
Modifié par Nolem (10 May 2010 - 01:54)
Modérateur
Tu as été plus rapide que moi.

matmat a écrit :
Le code de mal marche très bien Smiley lol ,


Je pense que certaines lignes ne t'ont pas sautées aux yeux...
* $tImg = array();
* scandir('images', 0);
* <img src='$dir/$image' style='display:none;' alt='' /> 2 fautes ici !

Pour chipoter, les styles en ligne sont à oublier...
Modifié par Nolem (10 May 2010 - 01:45)
Salut Nolem,

oui, un autre point c'est que la fonction ne devrait pas retourner les balises images mais seulement le nom des images, parce que là ça va bugguer avec un chemin absolu...
Bonjour,

Nolem a écrit :
Sans l'exécuter, c'est un script qui donnera qu'une seule occurence et d'une manière générale, il comporte 4 erreurs (2 php, 1 html, 1 css). Donc, je recommande : Avant de vouloir coder dans un langage plus robuste, toujours connaître les bases !


Désolé en effet, j'ai vraiment pondu du code minable... Mais le principe est plus ou moins bon.

Après rockrider, si tu est chez OVH (ou un autre hébergeur qui permet de changer de version de php via un .htaccess), tu peux en créer un et mettre le code suivant dedans pour tourner en php5:
SetEnv PHP_VER 5

La syntaxe change peut être en fonction de l'hébergeur.
Modifié par mal (10 May 2010 - 12:04)
chez Free il suffit de mette " php 1 " dans .htaccess,
mais certains scripts installés sur le site beug quand je passe au php 5...
merci à matmat d'avoir pensé au php 4, le code marche sans aucun problème.

Quand je me sers de
a écrit :
<?php foreach($tabImg as $i) echo $i; ?>

il m'affiche toutes les images du dossier

je l'ai changé pour ne plus afficher les images sur ma page principal
a écrit :
<?php foreach($tabImg as $i); ?>

mais il ne fonctionne plus dans ce cas là... !? Smiley confus

[ mon projet est de faire une sorte de visualisateur d'images... ]
Modifié par rockrider (10 May 2010 - 12:44)
bon, je vais répondre à moi même Smiley langue ...
pour résumer, j'ai copié le code compatible avec le php4 dans preload.php


[quote]function preload($path)  
{  
 
    $images = array(); 
     
    $path = rtrim($path, "/"); 
     
    if(false !== ($dir=opendir($path))) 
    { 
        while(false !== ($file=readdir($dir))) 
        { 
            $ext = strtolower(pathinfo($file, PATHINFO_EXTENSION)); 
                 
            if(in_array($ext,array('jpg','jpeg','png','gif'))) 
            { 
                $images[] = '<img src="'.$path.'/'.$file.'" style="" alt="" />'; 
            } 
        } 
        closedir($dir); 
    } 
 
    return $images; 
}  [/quote]


J'ai réalisé un tableau dans mon fichier CSS, j'ai ajouté
a écrit :
.prechargement {
	width: 0px;
	height: 0px;
	display: none; //none pour ne pas l'afficher 


et pour finir, le code à mettre dans la page de votre choix pour précharger les images
a écrit :

<div class="prechargement"> <!-- Prechargement -->  
   <?php
   include ('preload.php'); //dans le meme répertoire que mon index.php ?>
   <?php $tabImg=preload("load/bigimage/"); ?> //dossier des images à charger ! 
   <?php foreach($tabImg as $i) echo $i; ?>
</div>
 


Voilà voilà... terminé !
merci à ceux qui ont participé à la construction du code Smiley cligne
Modifié par rockrider (13 May 2010 - 10:01)