samtrex
Goto Top

Mehrere Bilder mit PHP in Content einfügen

Es geht darum Bilder in den Content einzubinden die NICHT direkt aus dem Netz erreichbar sind / wie der Download einer geschützren Datei z.B.

Hallo zusammen,
hier erstmal der Stand.

Auf dem Webserver läuft die Domain unter .../user/domain/www/ INHALT
Die Bilder die ich anzeigen möchte liegen unter .../user/domain/hide/ ... > Dieses Verzeichnis ist aus dem Web nicht erreichbar.

Nun das Problem:
Ich möchte gerne eine kleine Galerie haben - kein Akt. Aber es sollen nur angemeldete Benutzer diese Bilder sehen können!
Dachte mir der Weg sei der einfachste....
header("content-type: image/jpeg"); //Mime Type setzen  
$bilder = get_files_from_dir("../hide/fotos/test",true); //Pfade zu den Bildern ermitteln  
foreach ($bilder as $file) { //Pfad für jedes einzelne Bild aufrufen
	echo '<img src="' . readfile($file) . '"><br><br>'; //Bilder einfach untereinanderausgeben ....  
}

function get_files_from_dir() { //par1 = Pfad; par2 = recrusive (optional) >> Alle gefundenen Bilderpfade in ein Array schreiben
	$path = func_get_arg(0);
	$array = array();
	$dir = opendir($path);
	while($content = readdir($dir)) {
		if($content!="." && $content!=".." && is_dir($path . "/" . $content)) {  
			if(func_num_args()==2 && func_get_arg(1)==true) {
				$array = array_merge($array, get_files_from_dir($path . "/" . $content));  
			}
		}
		elseif($content!="." && $content!="..") {  
			array_push($array,$path . "/" . $content);  
		}
	} 
	closedir($dir);
	return $array;
}
... leider kann ich so immer nur ein Bild anzeigen, es sollen aber alle sein!
Hab nun schon den ganzen Abend gegoogelt face-sad

Kennt hier wer eine Lösung?
Danke schonmal ...

MfG Sam

Content-ID: 144694

Url: https://administrator.de/contentid/144694

Ausgedruckt am: 25.11.2024 um 17:11 Uhr

kopie0123
kopie0123 11.06.2010 um 23:47:52 Uhr
Goto Top
Guten Abend!

was kommen denn für Fehlermeldungen?
Arrayinhalte überall korrekt?

Gruß
SamTrex
SamTrex 12.06.2010 um 00:30:30 Uhr
Goto Top
Hallo,
es kommen gar keine. Der Code funktioniert ja so wie er oben ist.
Allerdings stellt er nur ein einzelnes Bild auf einer Seite dar.

Ich möchte aber mehrere Bilder in einen bestehenden Content einbauen.
Einziger Haken ist halt das ich nicht direkt auf die Bilder zugreifen kann ala:
<img scr=".....">  
sondern sie halt als Binärdaten in einer Variablen liegen.

MfG Sam
dog
dog 12.06.2010 um 03:55:31 Uhr
Goto Top
Du musst einen sehr netten Browser haben, wenn du tatsächlich ein Bild siehst face-smile

header("content-type: image/jpeg");  

Hier sagst du, dass der Browser ein Bild erwarten soll.

echo '<img src="   

Und hier fängst du dann auf einmal mit HTML an...

Aber gut, du hast zwei Möglichkeiten:

a) Die Bilder in HTML einbetten.
Von der Methode ist praktisch immer abzuraten, da du so eine riesige HTML-Datei bekommst und es nicht jeder Browser mitmacht

b) Erst eine HTML-Seite ausgeben, dann die Bilder laden:

#===== images.php
<html><body>
<?php

	function listFilesRecursiveCallback($startDir,$callBackFunction)
	{
		if(substr($startDir,-1) == '/')  
			$startDir = substr($startDir, 0, -1);
			
		$files = glob($startDir.'/*');  
		
		foreach ($files as $file) {
			if(!is_readable($file))
				continue;
			if(is_dir($file))
				listFilesRecursiveCallback($file,$callBackFunction);
			else
				$callBackFunction(substr($file, strlen($startDir)));
		}
	}
	
	listFilesRecursiveCallback(dirname(__FILE__).'/../images',function($filename) {  
		echo '<img src="file.php?img='.urlencode($filename).'" alt="" /><br/>';  
	});

?>
</body></html>
#====== file.php
<?php

	if(empty($_GET['img'])) {  
		header('HTTP/1.1 400 Bad Request');  
		exit(0);
	}
	
	$filename = urldecode($_GET['img']);  
	
	if(strpos($filename, "\x00") !== false) {  
		header('HTTP/1.1 400 Bad Request');  
		exit(0);
	}
	
	if(strpos($filename, '..') !== false) {  
		header('HTTP/1.1 400 Bad Request');  
		exit(0);
	}
	
	if($filename == '/')?   
		$filename = substr($filename, 1);
	
	$file = dirname(__FILE__).'/../images/'.$filename;  
	
	if(!file_exists($file) || !is_readable($file)) {
		header('HTTP/1.1 404 Not Found');  
		exit(0);
	}
	
	header('Content-Type: image/jpeg');  
	readfile($file);

?>

(PHP 5.3 Syntax, ungetestet und ausbaufähig)
SamTrex
SamTrex 12.06.2010 um 12:17:35 Uhr
Goto Top
Hallo dog...

UPS > hast natürlich vollkommen recht > peinlich peinlich .... (Ich glaube es war FF oder Crome face-smile > Dieser Halunke)
Danke für den Code, habe es auf meinen abgestimmt und läuft prima! Wusste gar nicht das man das auch so machen kann....
Ich arbeite jetzt zwar schon ein kleines Weilchen mit PHP, aber es ist ja ein nicht wirklich kleines Thema.


DANKE!

MfG Sam