Images aléatoires (php)

Résolu/Fermé
Maze - 24 févr. 2008 à 13:01
carbon3 Messages postés 470 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 6 janvier 2013 - 2 avril 2008 à 01:06
Bonjour,

AU SECOOOURS !!!
J'ai passé des heures à tester un nombre incalculable de scripts php pour afficher une image de manière aléatoire. Ceux permettant d'afficher tout le contenu d'un dossier en aléatoire, ceux permettant d'afficher un nombre choisi d'images...

J'ai soit l'affichage alt="image aléatoire", soit l'affichage de quelques caractères de la fin du code "; } ?>"
Le seul script qui semblait fonctionner m'affiche systématiquement, quelque chemin que je mette :
"Impossible d'ouvrir le dossier d'image !"
"Le répertoire d'images spécifié est incorrect !"; } ?>

J'ai essayé d'ouvrir directement mes .php avec mon navigateur, et aussi de créer des .htm avec le code <img src="mon.php"> pour voir, rien ne marche !

Je ne sais plus quoi faire !!!! Dans les commentaires des scripts que j'ai copiés, les gens disent souvent "c'est simple, ca marche", alors c'est que c'est moi ! Peut-être qu'il est tout simplement impossible de tester un script php sans passer par un serveur ??

Quelqu'un a t-il LE script simple et efficace ?? LA solution ?
A voir également:

36 réponses

Autre script testé (même résultat) :


<?php
/*
+----------------+
| Configuration |
+----------------+
*/

$imgpath = '/images/';
$textalter = "image aleatoire"; // texte alternative de l'image (attribut alt)

/*
+--------------+
| Programme |
+--------------+
*/

$nodir = 0;
if ($imgpath == ".." || $imgpath == "." || $imgpath == "")
{
$nodir = 1;
$imgpath = ".";
}

$j = strlen($imgpath);
$j--;
if ($imgpath[$j] != '/' && $imgpath != ".")
$imgpath .= '/';

if (is_dir($imgpath))
{

if ($condir = opendir($imgpath))
{
$i = 0;
while (($curfile = readdir($condir)) != false)
{
$extension = "";
$extension = preg_replace("/.+\.(.{3,4})/", "$1", $curfile);
if ($extension == "png" || $extension == "gif" || $extension == "bmp" || $extension == "jpg" || $extension == "jpeg")
{
$i++;
$images{$i} = $curfile;
}
}

if ($images{1} == "")
{
echo "Aucunes images dans le dossier !";
}
else
{
$i = rand(1, $i);
$image = $images{$i};
echo "<img src=\"";
if ($nodir != 1)
echo $imgpath;
echo "".$image."\" alt=\"".$textalter."\" />";
}
}
else
{
echo "Impossible d'ouvrir le dossier d'image !";
}
}
else
{
echo "Le répertoire d'images spécifié est incorrect !";
}

?>
0
carbon3 Messages postés 470 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 6 janvier 2013 73
27 févr. 2008 à 16:52
Salut Maze,
D'après ce que j'ai pu observer, il manque des parenthèses pour fermer tes boucles conditionnelles.
if ($imgpath == ".." || $imgpath == "." || $imgpath == "")
n'est pas fermée.

if ($imgpath[$j] != '/' && $imgpath != ".") 
$imgpath .= '/';
Pour autant que je sache, sur plusieurs lignes, les if doit être encadrées {}
ou supportent d'être sur une seule ligne quand il n'y a qu'une instruction.
if ($nodir != 1) 
echo $imgpath; 
echo "".$image."\" alt=\"".$textalter."\" />";
Idem
0
Salut Carbon !!
Et pour cette histoire de librairie GD, il n'y a pas de lien ?
Sinon, voila ce que j'ai fait suite à ton post :

- Pour la ligne non fermée par des () je ne vois pas... Il y a bien un parenthèse de chaque côté ? Je n'ai donc rien changé mais j'ai ajouté des {} :

if ($imgpath == ".." || $imgpath == "." || $imgpath == "") 
{ 
        $nodir = 1; 
	{
        	$imgpath = "."; 
} 


- Pour la ligne suivante, j'ai fait ajouté des {} comme ceci :

if ($imgpath[$j] != '/' && $imgpath != ".")  
{
        $imgpath .= '/'; 
}


- Enfin, pour la dernière j'ai fait ça :

if ($nodir != 1) 
			{ 
                               	echo $imgpath; 
				{
                        		echo "".$image."\" alt=\"".$textalter."\" />"; 
                } 


Et ça ne marche pô ! Bouh
0
carbon3 Messages postés 470 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 6 janvier 2013 73
27 févr. 2008 à 19:55
if ($imgpath == ".." || $imgpath == "." || $imgpath == "") 
{ 
        $nodir = 1; 
	{         <--- EN TROP
        	$imgpath = "."; 
} 

if ($nodir != 1) 
			{ 
                               	echo $imgpath; 
				{         <------- EN TROP
                        		echo "".$image."\" alt=\"".$textalter."\" />"; 
                } 

Et pour la première ligne, je parlais de parenthèses, pas de guillemets...
D'après ce que je vois sur le script, il semble manquer la parenthèse fermante qui doit se trouver en fin de script--avant la fermeture du code par ?>

Bibliothèque GD ? Nous n'avons pas abordé ce problème. S'il y en a un
0
J'ai relu tout le script et j'essaye de le comprendre (oula !) et je note cette ligne qui semble concerner le fait d'ouvrir le dossier images :
if ($condir = opendir($imgpath)) 

Je ne comprend pas encore bien le système pour les conditions mais j'ai cru comprendre qu'en général les balises de type $.... sont définies au préalable par $....= . Hors $condir n'est défini nulle part. C'est normal ? C'est une commande connue c'est ça ?
0
carbon3 Messages postés 470 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 6 janvier 2013 73
27 févr. 2008 à 20:00
tu confonds les balises et ce qu'on appelle variables, qui effectivement commencent par un signe $
Sa définition n'est pas obligatoire (si je me goure pas). Ceci dit, je vois sur ton script que tu lui as bien attribué une valeur
+----------------+ 
| Configuration | 
+----------------+ 
*/ 

$imgpath = '/images/'; 
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
En fait pour la variable non définie je pensais à $condir.

Pour GD, c'est que j'ai vu en cherchant sur le web des tuto où ils parlent de librairie GD pour pouvoir générer un certains nombre de choses lié aux images donc je me demandais s'il n'y avait pas un lien (apparemment la librairie GD n'est pas installée sur le serveur via lequel je fais mes tests).

Bon, j'ai supprimé les { de trop... Pour les parenthèses (oui oui, pas les guillemets) je dois être complètement attardée mais je ne vois décidément pas de quelles parenthèses tu parles. Un code php s'ouvre par <? et se ferme par ?> ça j'ai compris, mais par contre les parenthèses je vois pas.... :( !
Mes autres scripts php ne comportent pas de parenthèses sauf pour entourer le contenu d'une commande comme "mail" par exemple. Ceci dit y'a pas de "if" dans ces autres scripts... Ça change surement la donne.
0
carbon3 Messages postés 470 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 6 janvier 2013 73
27 févr. 2008 à 20:13
quand je lis ton script dans mon éditeur, la ligne 30
if (is_dir($imgpath)) {

ne rencontre pas sa parenthèse fermante.
0
carbon3 Messages postés 470 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 6 janvier 2013 73
27 févr. 2008 à 20:15
sinon $condir devrait passer.
Qd à l'histoire de librairie, ça dépasse mes compétences.
0
Ok ! En effet oui, moi je cherchais une parenthèse de type () et pas {} !!
Bon j'ai essayé deux choses (qui ne marchent pas) : sans rien (vu que c'est sur une seule ligne il me semble que tu as dit qu'on peut faire sans) et en fermant

1.
if ($imgpath[$j] != '/' && $imgpath != ".")  
{
        $imgpath .= '/'; 
}

if (is_dir($imgpath)) 


        if ($condir = opendir($imgpath)) 


2.
if ($imgpath[$j] != '/' && $imgpath != ".")  
{
        $imgpath .= '/'; 
}

if (is_dir($imgpath)) 
{
}

        if ($condir = opendir($imgpath)) 



Ok te prend pas la tête pour GD. Je trouverais !! Au fait, chez toi ce code fonctionne ? Ca pourrait répondre à cette histoire de GD
0
carbon3 Messages postés 470 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 6 janvier 2013 73
27 févr. 2008 à 20:30
on repart en live... :-)
Bon, mon pb c'est que j'arrive pas à démarrer mon serveur pour tester le php, ouin !!
0
Bon... T'embêtes pas pour tout de suite. J'ai un site où y'a pas mal de scripts pour ça, ce que je vais faire c'est les tester les uns derrière les autres ! (Pfff !) En priant !!
Pour GD sur le serveur moi j'ai fait un phpinfo() et il n'y avait rien concernant GD... Je suppose donc que c'est désactivé. Si t'arrives à faire tourner le tiens regarde ton phpinfo() peut-être ?
0
Bon !! Coup de pot, premier ouvert, premier qui a l'air de marcher ! Sauf que c'est pas du php mais du javascript...
On peut mettre du javasript dans du php ??
Voila le code (dans un .html)

<html>
<head>
	
		<title>Image Aléatoire Simplifiée</title>
	
		<SCRIPT LANGUAGE="JavaScript">
			/*
			** Extention de vos fichiers Image.
			** Le nom de vos images doivent etre du type : 
			** --> 1.jpg, 2.jpg, 3.jpg, 4.jpg, .... X.jpg
			** --> 1.gif, 2.gif, 3.gif, 4.gif, .... X.gif
			** --> ...
			*/
			var extention = ".jpg" ;
			/*
			** Nombre d'images diférentes à afficher.
			*/
			var nbimage = 4 ;
			/*
			** Déclaration d'autres varaibles.
			*/
			var url;
			var rep;
			var alt;
			
			function Images_Aleatoire()
			{
				//Génére un nombre aléatoire, pour donner un numéro d'image.
				numimage = Math.round( Math.random() * ( nbimage - 1 ) + 1 );
				// Nom de votre page d'accueil
				Page = "Accueil.html";
				// Nom du répertoire de vos images.
				rep = "Images"; 
				// Message info bulle, lors du survole de l'image affichée.
				alt = "--> Cliquez pour Entrer <--"; 
				// Assemblage de la chaine pour afficher votre image.
				url = './' + rep + '/' + numimage + extention ;
				// Affiche le numéro d'image généré aléatoirement.
				document.write( 'Numéro Image : ' + numimage + '<br><br>' );
				// Affiche l'image choisie ainsi que le lien vers votre page d'accueil.
				document.write ('<div align=center><a href="' + Page + '"><img src="' + url + '" alt="' + alt + '" border=0></a></div>');
			}
		</SCRIPT>
	

</head>

<body>
<SCRIPT language="JavaScript">
Images_Aleatoire();
</SCRIPT>
			
	
	
		
</body>
</html>
0
carbon3 Messages postés 470 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 6 janvier 2013 73
27 févr. 2008 à 20:48
ok, on se remet en standby...
Tu devrais t'enregistrer pour qu'on puisse se mailer direct sans encombrer le forum, et n'y poster que les réponses qui intéresses les gens... ;-)
0
carbon3 Messages postés 470 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 6 janvier 2013 73
27 févr. 2008 à 20:51
on fait faire tout ce qu'on veut à php. Y compris intégrer du html, du javascript ou même du vbscript
0
je sais pas si ce pb est résolu mais voilà ma solus:

le but: afficher 5 images choisis aléatoires dans 5 dossiers

pré-requis:
- démarrer une session
- PHP5
- numérotation des images de type nombre.extension
- ajout d'une fonction comteFichier()
- création de fichier image

tout d'abord le tableau avec la liste des dossiers:

$tabDossier=array('inside','vitrine','deco','mode','paris');

ensuite la boucle qui parcourt tous ces dossiers (inutile si 1 seul dossier, of course).
le but de la boucle: choisir l'image à afficher et placer le nom et le chemin dans une variable de session

foreach($tabDossier as $key=>$folder)
{
$imgs=compteFichier('../../media/'.$folder,'jpg'); // on compte le nbre de fichier de type jpg dans le dossier
$max_img=count($imgs); // on compte le nbre max de fichiers comptés
$num=rand(0,$max_img-1); // on tire au sort le n° de l'image
$image=$num.'.jpg'; // on crée le le nom de l'image
$img='img'.$key; // on crée la clé de la variable de session
$_SESSION[$img]=$folder.'/'.$image; // on entre le chemin de l'image dans la variable de session
}

suite à ce foreach on obtient 5 chemins de type $_SESSION['img2']='inside/3.jpg'

enfin à l'endroit où on appelle l'image on place le code
<img src='../photos/img2.php' alt='image 2 à afficher' />


bien sur dans le dossier photos on retrouve (dans cet exemple) 5 fichiers nommés
img0.php .... img4.php

dont le contenu est le suivant:

<?php
session_start(); // ne pas oublier pour récupérer la variable de session créée
header("Content-type: image/jpeg");
$nom_fichier=$_SESSION['img2'];
imagejpeg($image);
imagedestroy($image);
?>

NB l'intérêt de ce fichier php est d'employer les fonctions IMAGE FILTER() permettant de modifier les photos.
Ex:

<?php
session_start();
header("Content-type: image/jpeg");
$nom_fichier=$_SESSION['img2'];
$r=$_SESSION['rouge'];
$v=$_SESSION['vert'];
$b=$_SESSION['bleu'];
$image = @imagecreatefromjpeg($nom_fichier);
imagefilter($image, IMG_FILTER_GRAYSCALE);
imagefilter($image,IMG_FILTER_COLORIZE,$r,$v,$b);
imagejpeg($image);
imagedestroy($image);
?>


voilà c'est fait

donc je résume

1 script php qui tire au sort la photo et crée le chemin dans une variable
2 script php qui crée l'image en php avec des options de modif via IMAGEFILTER
3 un simple appel de l'image en html via la balise <img src='xx.php'>

+ la fonction compteFichier que voici:


function compteFichier($dossier,$extension=null) // on récup le dossier à examiner
{
$fichiers=scandir($dossier); // on fait un scandir qui retourne un tableau
if($extension!=null) // si on filtre sur une extension en particulier on refait le tableau
{
foreach($fichiers as $kfi => $vfi)
{
$valeur=explode('.',$vfi); // on "explode" pour séparer le nom et l'extension
if($valeur[1]==$extension)
{
$reponse[]=$vfi; // on ne garde que se dont l'extension correspond
}
}
}
return $reponse;
}


FINI
0
carbon3 Messages postés 470 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 6 janvier 2013 73
1 avril 2008 à 23:49
oups, le pb était résolu (mais Maze n'a pas su changer le statu de la discussion). Ceci dit comme j'avais pas posté ma réponse dans cette discussion, merci d'en avoir proposé une.
0
Mazamazine Messages postés 81 Date d'inscription mercredi 27 février 2008 Statut Membre Dernière intervention 10 février 2015 13
2 avril 2008 à 00:54
Oui en effet le problème est résolu mais j'avais ouvert le sujet en tant qu'invitée. Je n'arrive pas à le fermer.
J'ai pu faire marcher ça en javascript finalement.
D'autre part Carbon m'a proposé une nouvelle solution en php que je n'ai pas encore eu le temps de tester. Je fais 10 000 choses à la fois !
Dès que j'aurais testé j'en ferais part.
0
carbon3 Messages postés 470 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 6 janvier 2013 73
2 avril 2008 à 01:06
demandes aux modérateurs s'ils veulent bien avoir la gentillesse de la marquer résolue pour toi (icône point exclamation à gauche des messages)
;-)
0