Download function auf einen anderen Server zugreifen

AvalanchRider

Grünschnabel
Hi an alle,

ich möchte Dateien zum Download auf meiner Homepage anbieten.
Um die DL's in der Datenbank zu zählen habe ich eine Funktion geschrieben die nach dem klick auf den Download Button nach dem Seiten Refresh ausgeführt wird.

Die Download Funktion besteht im weitesten Sinne aus den bekannten Headern....

PHP:
 function downloadfile($file , $ort){
 	header("Content-type: application/octetstream");
 	header("Content-disposition:attachment; filename=".$ort.$file);
 	header("Content-Length: ".$size);
 	header("Pragma: no-cache");
 	header("Expires: 0");
 	readfile($ort.$file);
 	fclose($file);	
 }

nun probier ich schon seit einigen Tagen, und die Downloadfunction an sich funktioniert ja auch. Doch mir stellt sich die Frage ob ich einen Download eines Files von einem Fremden Server starten kann.

gut Nacht
mfg AvalanchRider
 
Probier mal Folgendes:
PHP:
<?php

	define('CRLF', chr(0x0D).chr(0x0A));

	function downloadfile($file)
	{
		$_is_remote = (bool) preg_match('|^http://|i', trim($file));
		$_headerFields = array(
			'Content-Type'        => 'application/octet-stream',
			'Content-Disposition' => 'attachment; filename="'.basename($file).'"',
			'Content-Length'      => $_is_remote ? getRemoteFileSize($file) : filesize($file),
			'Pragma'              => 'no-cache',
			'Expires'             => 0
		);
		foreach( $_headerFields as $_fieldName => $_fieldValue ) {
			header($_fieldName.': '.$_fieldValue);
		}
		return readfile($file);
	}

	function getRemoteFileSize($file)
	{
		$_urlParts = parse_url($file);
		if( !isset($_urlParts['host']) ) {
			return false;
		}
		if( !( $_handle = fsockopen($_urlParts['host'], 80, $_errorNo, $_errorStr) ) ) {
			echo $_errorStr.' ('.$_errorNo.')';
			return false;
		}

		$_headerFields = array(
			'Host' => $_urlParts['host']
		);
		$_request  = 'HEAD '.$_urlParts['path'].' HTTP/1.1' . CRLF.CRLF;
		foreach( $_headerFields as $_fieldName => $_fieldValue ) {
			$_request .= $_fieldName.': '.$_fieldValue . CRLF;
		}
		fputs($_handle, $_request.CRLF);
		while( !feof($_handle) ) {
			if( preg_match('/content-length\s*:\s*([0-9]+)/is', fgets($_handle, 128), $matches) ) {
				return $matches[1];
			}
		}
		fclose($_handle);
		return null;
	}

	downloadfile('http://google.de/');

?>
 
Hi,

diese Funktion ist ja sehr schön, kann bloß leider bis jetzt nicht sehr viel anfangen.
Sie ist an vielen Stellen für mich noch sehr unverständlich wie sie arbeitet habe ich aber grob verstanden...

... ich konnte mein Problem lösen habe mir einen anderen Hoster mit mehr Speicher gesucht nun denke ich bekomme ich es hin.
wenn die Dateien auf dem gleichen Server liegen.

schönen Dank nochmal AvalanchRider
 
Zurück