[php] Datei zum downloaden Anbieten, nicht phpBB

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Benutzeravatar
Asmodiel
Mitglied
Beiträge: 568
Registriert: 31.03.2006 14:16
Wohnort: Kassel
Kontaktdaten:

[php] Datei zum downloaden Anbieten, nicht phpBB

Beitrag von Asmodiel »

Hi!
ich brauch für meine hp, also nichts mit download mod oder so eine php-funktion mit der ich eine jpg-datei DOWNLOADEN lasse und nicht wie standartgemäß in 90% der browser anzeigen (also wenn ich *****.jpg aufrufe soll das downloadfenster kommen und nicht das angezeigte bild!)


kann mir da jemand helfen?
es geht halt um eine gallery!

gruß!
asmodiel

Ps.: suchfunktion hab ich hier, auf php.net, google und selfphp.de benutzt! o.O
Schönen gruß, Asmodiel
Linus Thorvals hat geschrieben:Intelligence is the ability to avoid doing work, yet getting the work done.
Benutzeravatar
S2B
Ehemaliges Teammitglied
Beiträge: 3258
Registriert: 10.08.2004 22:48
Wohnort: Aachen
Kontaktdaten:

Beitrag von S2B »

Versuch mal sowas:

Code: Alles auswählen

header('Content-type: application/octet-stream');
header('Content-disposition: attachment; filename=<Dateiname>');
header('Content-Length: <Dateigröße>');
readfile('<Pfad zur Datei>');
Gruß, S2B
Keinen Support per ICQ/PM!
Hier kann man meine PHP-Skripte und meine MODs für phpBB runterladen.
Benutzeravatar
Asmodiel
Mitglied
Beiträge: 568
Registriert: 31.03.2006 14:16
Wohnort: Kassel
Kontaktdaten:

Beitrag von Asmodiel »

achso... und die dateigröße und so muss dabei sein?
naja... ich glaube, dass die einfachste version wäre, das in ne zip zu packen und gut iss :D
Schönen gruß, Asmodiel
Linus Thorvals hat geschrieben:Intelligence is the ability to avoid doing work, yet getting the work done.
Benutzeravatar
Olli Oberhausen
Mitglied
Beiträge: 561
Registriert: 22.10.2004 01:03
Wohnort: Oberhausen NRW
Kontaktdaten:

Beitrag von Olli Oberhausen »

IE und Opera brauchen jedoch application/octetstream - sonst klappts nicht in den Browsern...

Hat sich wohl jemand beim programmieren der Browser verschrieben :grin:

Gruß, Olli
Neulich im Zoo: Papa, guck mal, da sind Linuxe...
KB-Suche :: db_update_generator :: phpMyAdmin
Winmerge :: Zend Studio
Benutzeravatar
Asmodiel
Mitglied
Beiträge: 568
Registriert: 31.03.2006 14:16
Wohnort: Kassel
Kontaktdaten:

Beitrag von Asmodiel »

danke euch beiden erstmal, aber wie soll ich das dann machen, dass ie opera und firefox das machen?
beide schnipsel nehmen?
Schönen gruß, Asmodiel
Linus Thorvals hat geschrieben:Intelligence is the ability to avoid doing work, yet getting the work done.
Xwitz
Mitglied
Beiträge: 1104
Registriert: 21.06.2005 21:41

Beitrag von Xwitz »

Die Funktion habe ich mir zusammengesucht:

Code: Alles auswählen

function makeDownload($file, $dir, $type) {

$file_kurz = $file;
$dirfile =  $dir.$file;

// Dateityp, der immer abgespeichert wird 
header("Content-Type: application/octetstream"); 

// Dateiname mit Sonderbehandlung des IE 5.5 
header("Content-Disposition: ".(!strpos($HTTP_USER_AGENT,"MSIE 5.5")?"attachment; ":"")."filename=$file_kurz"); 

// Im Grunde ueberfluessig, hat sich anscheinend bewährt 
header("Content-Transfer-Encoding: binary"); 

// Zwischenspeichern auf Proxies verhindern 
header("Cache-Control: post-check=0, pre-check=0"); 

// Dateigröße für Downloadzeit-Berechnung 
header("Content-Length: ".filesize($dirfile)); 

readfile($dirfile);
    
} 
Bisher habe ich damit keine Probleme festgestellt.
Benutzeravatar
Olli Oberhausen
Mitglied
Beiträge: 561
Registriert: 22.10.2004 01:03
Wohnort: Oberhausen NRW
Kontaktdaten:

Beitrag von Olli Oberhausen »

Und ich das ganze auch noch mal :D

Code: Alles auswählen

<?php
function send_file($attachment, $upload_dir)
{
	global $_SERVER, $HTTP_USER_AGENT, $HTTP_SERVER_VARS, $lang, $db, $attach_config;

	$filename = ($upload_dir == '') ? $attachment : $upload_dir . '/' . $attachment;


	if (@!file_exists(@realpath($filename)))
	{
		die('Datei nicht gefunden: ' . $filename);
	}

	if (!empty($_SERVER['HTTP_USER_AGENT'])) 
	{
		$HTTP_USER_AGENT = $_SERVER['HTTP_USER_AGENT'];
	} 
	else if (!empty($HTTP_SERVER_VARS['HTTP_USER_AGENT'])) 
	{
		$HTTP_USER_AGENT = $HTTP_SERVER_VARS['HTTP_USER_AGENT'];
	}
	else if (!isset($HTTP_USER_AGENT))
	{
		$HTTP_USER_AGENT = '';
	}

	if (ereg('Opera(/| )([0-9].[0-9]{1,2})', $HTTP_USER_AGENT, $log_version)) 
	{
		$browser_version = $log_version[2];
		$browser_agent = 'opera';
	} 
	else if (ereg('MSIE ([0-9].[0-9]{1,2})', $HTTP_USER_AGENT, $log_version)) 
	{
		$browser_version = $log_version[1];
		$browser_agent = 'ie';
	} 
	else if (ereg('OmniWeb/([0-9].[0-9]{1,2})', $HTTP_USER_AGENT, $log_version)) 
	{
		$browser_version = $log_version[1];
		$browser_agent = 'omniweb';
	} 
	else if (ereg('Netscape([0-9]{1})', $HTTP_USER_AGENT, $log_version)) 
	{
		$browser_version = $log_version[1];
		$browser_agent = 'netscape';
	} 
	else if (ereg('Mozilla/([0-9].[0-9]{1,2})', $HTTP_USER_AGENT, $log_version)) 
	{
		$browser_version = $log_version[1];
		$browser_agent = 'mozilla';
	} 
	else if (ereg('Konqueror/([0-9].[0-9]{1,2})', $HTTP_USER_AGENT, $log_version)) 
	{
		$browser_version = $log_version[1];
		$browser_agent = 'konqueror';
	} 
	else 
	{
		$browser_version = 0;
		$browser_agent = 'other';
	}

	$mimetype = ($browser_agent == 'ie' || $browser_agent == 'opera') ? 'application/octetstream' : 'application/octet-stream';

	header('Pragma: public');


	// Send out the Headers
	header('Content-Type: ' . $mimetype . '; name="' . $filename . '"');
	
	header('Content-Disposition: attachment; filename="'.$filename.'"');

	//
	// Now send the File Contents to the Browser
	//
	$size = @filesize($filename);
	if ($size)
	{
		header("Content-length: $size");
	}
	readfile($filename);

	exit;
}

		
send_file('help1.gif', 'images');

?>
Man sollte hier mal einen Tag einbauen "Antwort ist in Arbeit ;o)"

Olli
Neulich im Zoo: Papa, guck mal, da sind Linuxe...
KB-Suche :: db_update_generator :: phpMyAdmin
Winmerge :: Zend Studio
Benutzeravatar
Asmodiel
Mitglied
Beiträge: 568
Registriert: 31.03.2006 14:16
Wohnort: Kassel
Kontaktdaten:

Beitrag von Asmodiel »

ich hab mal die kürzere version genommen und...
naja, ein bisschen verändert halt, header und footer included und titel dazugegeben...

Code: Alles auswählen

<?php
  $root_path = "./";
$page_title = "Download";

include($root_path.'includes/header.php');

  $file = $_GET['file'];
  $dir = "uploads/";

  function makeDownload($file, $dir) {

$file_kurz = $file;
$dirfile =  $dir.$file;

// Dateityp, der immer abgespeichert wird
header("Content-Type: application/octetstream");

// Dateiname mit Sonderbehandlung des IE 5.5
header("Content-Disposition: ".(!strpos($HTTP_USER_AGENT,"MSIE 5.5")?"attachment; ":"")."filename=$file_kurz");

// Im Grunde ueberfluessig, hat sich anscheinend bewährt
header("Content-Transfer-Encoding: binary");

// Zwischenspeichern auf Proxies verhindern
header("Cache-Control: post-check=0, pre-check=0");

// Dateigröße für Downloadzeit-Berechnung
header("Content-Length: ".filesize($dirfile));

readfile($dirfile);

}
makeDownload($file, $dir);
include ( $root_path.'includes/footer.php');
?>
o.O also als ich die testdatei "KF_girl_1.jpg" downloaden wollte und das noch nicht verändert hatte wurde alles normal gedownloaded.
NUR nachdem ich das getan hab kommt jetzt das hier:

Code: Alles auswählen

Warning: Cannot modify header information - headers already sent by (output started at /var/www/user/as/asmodiel/html/uploader/includes/header.php:6) in /var/www/user/as/asmodiel/html/uploader/download.php on line 16

Warning: Cannot modify header information - headers already sent by (output started at /var/www/user/as/asmodiel/html/uploader/includes/header.php:6) in /var/www/user/as/asmodiel/html/uploader/download.php on line 19

Warning: Cannot modify header information - headers already sent by (output started at /var/www/user/as/asmodiel/html/uploader/includes/header.php:6) in /var/www/user/as/asmodiel/html/uploader/download.php on line 22

Warning: Cannot modify header information - headers already sent by (output started at /var/www/user/as/asmodiel/html/uploader/includes/header.php:6) in /var/www/user/as/asmodiel/html/uploader/download.php on line 25

Warning: Cannot modify header information - headers already sent by (output started at /var/www/user/as/asmodiel/html/uploader/includes/header.php:6) in /var/www/user/as/asmodiel/html/uploader/download.php on line 28

$4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ
und hier halt noch viele andere komische zeichen, die anscheinend vom jpg kommen, wenn man das mit dem texteditor öffnet o.O

o.O
was ist da los?!
Schönen gruß, Asmodiel
Linus Thorvals hat geschrieben:Intelligence is the ability to avoid doing work, yet getting the work done.
Benutzeravatar
Olli Oberhausen
Mitglied
Beiträge: 561
Registriert: 22.10.2004 01:03
Wohnort: Oberhausen NRW
Kontaktdaten:

Beitrag von Olli Oberhausen »

Du darfst keinen header includieren... Du willst doch eine Dtei senden und keine html seite ....

Olli
Neulich im Zoo: Papa, guck mal, da sind Linuxe...
KB-Suche :: db_update_generator :: phpMyAdmin
Winmerge :: Zend Studio
Xwitz
Mitglied
Beiträge: 1104
Registriert: 21.06.2005 21:41

Beitrag von Xwitz »

Asmodiel hat geschrieben:naja, ein bisschen verändert halt, header und footer included und titel dazugegeben...
Die Funktion gibt nichts weiter als die Datei aus, sie muß über einen Link oder ein Formular angesprochen werden. Außerdem muß man noch etwas für die Sicherheit tun.

z.B.

Code: Alles auswählen

if(file_exists ($dir.$_GET['v']))     {...
Antworten

Zurück zu „Coding & Technik“