fread() hat Probleme mit großen Dateien?!

porki

Registered User
Hallo,

ich habe ein Problem und vielleicht kann mir jemand helfen:-)

Ich habe mp4-Dateien, also Videos, per .htaccess vor direkten Zugriff geschützt. Zugriff erfolgt jetzt über ein PHP-Skript mit Login und Session, welches im Kern so aussieht:

Beispielaufruf: sesame.php?playfile="bowie.mp4"
Code:
...
function auslesen($file) {
	$fp = fopen($file, 'rb');
	$chunksize = 1024*1024;
	$len = filesize($filename);
	if ($fp) {
	 // header("HTTP/1.1 206 Partial Content \n");
	 // header("Content-Length: $len;\n");
	header("Content-Type: application/octet-stream; "); 
	//header("Content-Transfer-Encoding: binary"); 
	header("Content-Length: " . filesize($file) ."; "); 
	while (!feof($fp)) {
		echo fread($fp, $chunksize);
		flush();
	    }
	    fclose($fp);
	}
}

Es funktioniert bei Bildern sehr gut, jedoch bei Videos nicht. Die Videos werden über object/embed mit dem Quicktime-Plugin angezeigt.
Der erste Aufruf klappt und dann reagiert der Server nicht mehr bis zum einem "apache2ctl restart".

Woran verhaspelt sich PHP? Dateigröße? Hat jemand eine ähnliche Lösung? Wie kann ich meine Dateien sonst schützen.

gruß porki
 
Kann evt. daran liegen. Du möchtest also Direktzugriff verbieten und die Dateien per Header zum Download bereitstellen?
 
Ja, fast.

Das Downloaden funktioniert. Ich möchte aber die angeforderte Datei im Browser des Benutzers über das Quicktime plugin abspielen. Das funktioniert nur bei kleinen Dateien. Bei großen Dateien hängt sich merkwürdigerweise PHP auf.

Ich kenne leider keine andere Lösung um Dateien vor direkten Download zu schützen. PHP Login mit Session ist schon sehr praktisch.


EDIT: Hat jemand Erfahrung mit mod_xsendfile für Apache?
 
Last edited by a moderator:
Ja, dqanke. Schau ich mir gleich an ;-)

Diese Zeile geht mit dem Aufhängen einher:

error.log:
Code:
[Thu Nov 26 10:02:47 2009] [warn] (103)Software caused connection abort: mod_fcgid: ap_pass_brigade failed in handle_request function
 
Back
Top