[PHP] Anhänge Funktion fürs Forum

  • Ersteller Ersteller Mc.Alcatraz
  • Erstellt am Erstellt am
M

Mc.Alcatraz

Gast
Wenn man bei mir im Forum auf nen Anhang klickt wird die attachment.php geladen und die zum Anhang gehörende ID übergeben also z.b attachment.php?id=5 Nun lese ich in der attachment.php in sql den pfad zu datei aus. Mein Problem ist nur das ich nun möchte das Bilder angezeigt werden und andere Dateien zum Downlaod angeboten werden sollen, wie bekomme ich das hin ohne direkt auf die datei zu verlinken?
 
nachdem du den pfad aus der db ausgelesen hast, könntest du mithilfe eines entsprechenden regex entscheiden, wie der anhang ausgegeben wird. wenn die datei bspw. die endung png, jpe, jpeg, jpg oder gif hat, kannst du sie als bild ausgeben lassen. denn die datei nicht dem regex entspricht kannst du sie als download anbieten lassen.
also nach der abfrage aus der db eine if abfrage, die entscheidet, wie mit der datei umgegangen wird.
 
PHP:
// Copyright by CB(raz0r1[at]gmx.net) änderungen sind mir vorbehalten und dürfen nur in absprache mit mir veröffentlich werden!
function dl_file($file)
	{
		//First, see if the file exists
		if (!is_file($file)) { die("<b>404 File not found!</b>"); }
		//Gather relevent info about file
		$len = filesize($file);
		$filename = basename($file);
		$file_extension = strtolower(substr(strrchr($filename,"."),1));
		//This will set the Content-Type to the appropriate setting for the file
		switch( $file_extension ) 
		{
			case "pdf": $ctype="application/pdf"; break;
			case "exe": $ctype="application/octet-stream"; break;
			case "zip": $ctype="application/zip"; break;
			case "doc": $ctype="application/msword"; break;
			case "xls": $ctype="application/vnd.ms-excel"; break;
			case "ppt": $ctype="application/vnd.ms-powerpoint"; break;
			case "gif": $ctype="image/gif"; break;
			case "png": $ctype="image/png"; break;
			case "jpeg":
			case "jpg": $ctype="image/jpg"; break;
			case "mp3": $ctype="audio/mpeg"; break;
			case "wav": $ctype="audio/x-wav"; break;
			case "mpeg":
			case "mpg":
			case "mpe": $ctype="video/mpeg"; break;
			case "mov": $ctype="video/quicktime"; break;
			case "avi": $ctype="video/x-msvideo"; break;
			//The following are for extensions that shouldn't be downloaded (sensitive stuff, like php files)
			case "php":
			case "htm":
			case "html":
			case "txt": die("<b>Cannot be used for ". $file_extension ." files!</b>"); break;
			default: $ctype="application/force-download";
		}
		//Begin writing headers
		header("Pragma: public");
		header("Expires: 0");
		header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
		header("Cache-Control: public");
		header("Content-Description: File Transfer");
		//Use the switch-generated Content-Type
		header("Content-Type: $ctype");
		//Force the download
		$header="Content-Disposition: attachment; filename=".$filename.";";
		header($header );
		header("Content-Transfer-Encoding: binary");
		header("Content-Length: ".$len);
		@readfile($file);
		exit;
	}

erklärung:
1.) in die funktion wird der pfad zu datei übergeben
2.) die dateieinzellheiten(name, größe, extension) werden in vars gespeichert
3.) aus den dateiendungen werden die uzlässigen erkennungen für html/php gemacht [switch]
4.) danach kommt noch eine reihe von header die letztendlich den download mit
PHP:
@readfile($file);
starten
bei den headern wird so verfahren, dass eine scheinseite aufgebaut wird, auf dem der download läuft...

wenn du dir dsa reinziehst und verstehst, dann kannste alles machen was du willst in bezug auf dein prob^^

MfG
 

Ähnliche Themen

M
Antworten
1
Aufrufe
913
Zurück
Oben