Archief - PHP: random foto

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Soundstorm

Legacy Member
Hallo,

Ik heb alweer een probleempje, deze keer in php.
Er zou een random foto uit een map gehaald moeten worden en deze dan weergeven. Daarvoor heb ik een scriptje gevonden en het wat aangepast aan mijn noden.
PHP:
<?php
function random() {
	$dir = "photo/"; 
	$teller=-1; 
	if ($handle = opendir($dir)) { 
	   while (false !== ($file = readdir($handle))) { 
	if ($file != "." && $file != ".." && !(is_dir($file))) { 
	$teller++; 
	$img[$teller] = $file; 
		   } 
	   } 

	   closedir($handle); 
	} 
	$random = rand(0, count($img)); 
	echo "<img src=\"$dir$img[$random]\" width=160 height=120 border=0>"; 
}
?>

<table cellpadding="0" cellspacing="0" align="center">
	<tr height="10px"><td></td></tr>
	<tr height="22px" align="center"><td>Random image</td></tr>
	<tr height="160px" align="center"><td><? random(); ?></td></tr>
	<tr height="160px" align="center"><td><? random(); ?></td></tr>
	<tr height="160px" align="center"><td><? random(); ?></td></tr>
	<tr height="10px"><td></td></tr>
</table>
Nu heb ik al vanalles geprobeerd (ook die !is_dir() toegevoegd), maar het lukt mij niet om hem alleen foto's te laten weergeven.
Momenteel zit er in de map photo 1 bestand (Astra1.jpg) en 1 map (public).
Als resultaat geeft hij dus een van volgende 3 mogelijkheden:
<img src="photo/">
<img src="photo/public">
<img src="photo/Astra1.jpg">

Hoe kan ik dit dus aanpassen dat hij alleen maar foto's als resultaat geeft?
En is er ook een mogelijkheid om de map photo niet readable te maken voor Public (dus een forbidden krijgen als je er op komt) en toch nog dit script te gebruiken?

Rvl

Legacy Member
Code:
function random() {
    $img = array();
	$dir = "images/";
    $teller = 0;
	$types = array("jpg");
    
	if($handle = @opendir($dir)) {
		while (false !== ($file = readdir($handle))) {
			$type = explode(".",$file);
			if(in_array($type[1],$types) && $file != '.' && $file != '..') $img[++$teller] = $file;
		}
		closedir($handle);
	}

    $random = rand(1, count($img));
    echo "<img src=\"$dir$img[$random]\" width=160 height=120 border=0>";
}
zal beter werken volgens mij. Wel even toevoegen welke type van images je wil toelaten.

Soundstorm

Legacy Member
Bedankt voor de hulp, maar dit werkt ook niet :(
Nu geeft hij alleen nog maar <img src="photo/">

Is er ook een oplossing voor de machtigingen?

Rvl

Legacy Member
wel, ik heb het hier getest, en bij mij werkt het perfect
u image naam mag wel maar 1 punt bevatten anders moet ge $type[count($type) - 1] doen. Script is ook case sensitive als je dit niet wil >> strlower($file)

Soundstorm

Legacy Member
Het mag case sensitive zijn, en ze bevatten ook allemaal (nu nog maar 1 file) maar 1 punt.
Ik heb nogmaals gebprobeerd. Deze keer gewoon de .php in de map zelf gezet. Maar helaas. Begrijp niet wat er mis gaat.
PHP:
<?php
function random() {
    $img = array();
	$dir = "";
    $teller = 0;
	$types = array("jpg");
    
	if($handle = @opendir($dir)) {
		while (false !== ($file = readdir($handle))) {
			$type = explode(".",$file);
			if(in_array($type[1],$types) && $file != '.' && $file != '..') $img[++$teller] = $file;
		}
		closedir($handle);
	}

    $random = rand(0, count($img) - 1);
    echo "<img src=\"$dir$img[$random]\" width=160 height=120 border=0>";
}
?>

<table cellpadding="0" cellspacing="0" align="center">
	<tr height="10px"><td></td></tr>
	<tr height="22px" align="center"><td>Random image</td></tr>
	<tr height="160px" align="center"><td><? random(); ?></td></tr>
	<tr height="160px" align="center"><td><? random(); ?></td></tr>
	<tr height="160px" align="center"><td><? random(); ?></td></tr>
	<tr height="10px"><td></td></tr>
</table>

servi

Legacy Member
verander dit :
$type = explode(".",$file);
if(in_array($type[1],$types)

in :

$type = explode(".",$file);
if(in_array($type[count($type)-1],$types)

Soundstorm

Legacy Member
Prachtig, nu werkt het! Ik heb nu al enkele keren op F5 zitten rammen en er komt nooit een rood kruisje, dus volgens mij werkt het :)

Maar hoe zorg ik nu dat bezoekers die map niet kunnen zien, maar dat php script wel?

servi

Legacy Member
simpele methode : een index.htm zetten in de map met foto's

servi

Legacy Member
of een tekstje

ge moogt hier niet komen, nanana !111!!!


whatever does the trick, zo kunnen mensen uw directory niet meer zien.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan