Bislang benutze ich unter http://alohadakine.org/downloads/
die session funktionen um content grabbing zu verhindern.. klappt auch bei kleinen dateien bis ca. 300mb problemlos..
aber bei dateien die 700mb und größer sind "haut das meinen webserver aus den latschen" :]
ich schätze mal das liegt daran das das phpfile die gesamte datein "öffnet" und "in den arbeitsspeicher???" läd bevor sie an den client geschickt wird?!
Falls das so stimmt.. jemand eine bessere Idee, bzw einen Verbesserungsvorschlag.. würde nämlich gerne keine Probleme mit großen Dateien haben :]
Download mit PHP und Sessions absichern..
-
- Posts: 15
- Joined: 2007-04-30 16:31
- Location: Mendencity
-
- Posts: 64
- Joined: 2005-03-26 13:33
- Location: Wildeshausen
Re: Download mit PHP und Sessions absichern..
Vielleicht mal lighttpd mit mod_secdownload austesten?
Allgemein versteh ich aber auch die Problematik nicht so ganz. Was haben die Session-Funktionen damit zu tun? Wenn du den Download so in der Art ausgibst
dann wird das Ding nicht komplett in den Speicher geladen, sondern gestreamed. Solltest also keine Probleme mit deinem Arbeitsspeicher bekommen. Trotzdem ist die lighty-Lösung sicherlich ressourcensparender.
Allgemein versteh ich aber auch die Problematik nicht so ganz. Was haben die Session-Funktionen damit zu tun? Wenn du den Download so in der Art ausgibst
Code: Select all
<?php
header ( "Content-Type: application/octet-stream" );
header ( "Content-Length: " . filesize ( $Datei ) );
header ( "Content-Disposition: attachment; filename=$DateiName" );
readfile ( $Datei );
?>
-
- Posts: 15
- Joined: 2007-04-30 16:31
- Location: Mendencity
Re: Download mit PHP und Sessions absichern..
habs im moment so:
irgendwas, das die ressource so übel beanspruchen könnte?
die daten holt er sich aus der db
-> mir mir auch klar, dass das kaum was mit den session zu tun haben kann -die auslastung- aber wollte trotzdem kurz erklären worum's eigentlich geht.. damit nicht nachher einer kommt der meint -> mach doch einfach einen direct link auf die file.. ;)
Code: Select all
// checking if file is available ;)
$check_dl = @fopen("".$datafile."","r");
if( $check_dl ) // natürlich mit { auf und } ;)
Code: Select all
// we're going to tell the browser what filetype the file should become
header( "Content-type: $mimetype" );
// we're going to tell the browser what filesize the file is
header( "Content-Length: ".@filesize( $datafile ) );
// we're going tell the browser what filename the file should get
header( 'Content-Disposition: attachment; filename="'.$filename.'"' );
// now we're going to include the whole filecode
readfile( $datafile);
die daten holt er sich aus der db
-> mir mir auch klar, dass das kaum was mit den session zu tun haben kann -die auslastung- aber wollte trotzdem kurz erklären worum's eigentlich geht.. damit nicht nachher einer kommt der meint -> mach doch einfach einen direct link auf die file.. ;)
-
- Posts: 391
- Joined: 2006-09-05 21:12
- Location: Berlin
Re: Download mit PHP und Sessions absichern..
Versuch mal anstatt eines fopen ein is_readable
-
- Posts: 15
- Joined: 2007-04-30 16:31
- Location: Mendencity
Re: Download mit PHP und Sessions absichern..
werd ich gleich mal mit ner größeren datei ausprobieren.. wenns funkt wäre super..
-> habe auch gerade gesehen, dass ich das fopen nicht geclosed habe in der datei die die downloads managed..
könnte natürlich der grund gewesen sein.. wir werden sehen.. poste natürlich ob's wie gewünscht funkt :)
-> habe auch gerade gesehen, dass ich das fopen nicht geclosed habe in der datei die die downloads managed..
könnte natürlich der grund gewesen sein.. wir werden sehen.. poste natürlich ob's wie gewünscht funkt :)
-
- Posts: 15
- Joined: 2007-04-30 16:31
- Location: Mendencity
Re: Download mit PHP und Sessions absichern..
klappt leider immer noch nicht weder du das ändern des mime types auf octet-stream noch durch das ändern auf is_readable..
also funken tuts immer noch.. aber immer noch genaus ressourcenfressend wie vorher
also funken tuts immer noch.. aber immer noch genaus ressourcenfressend wie vorher
-
- Posts: 52
- Joined: 2007-03-08 13:45
Re: Download mit PHP und Sessions absichern..
Kommentar von php.net zur Readfile:
When using readfile() with very large files, it's possible to run into problems due to the memory_limit setting; apparently readfile() pulls the whole file into memory at once.
(Das ganze taucht natürlich nicht in der Doku auf...PHP halt)
Versuch mal eine !feof-fread Schleife, möglicherweise funktioniert das.
When using readfile() with very large files, it's possible to run into problems due to the memory_limit setting; apparently readfile() pulls the whole file into memory at once.
(Das ganze taucht natürlich nicht in der Doku auf...PHP halt)
Versuch mal eine !feof-fread Schleife, möglicherweise funktioniert das.
-
- Posts: 15
- Joined: 2007-04-30 16:31
- Location: Mendencity
Re: Download mit PHP und Sessions absichern..
so.. nun scheint es soweit zu gehen.. das problem ist jetzt aber:
irgendwie scheint es da irgendwie sowas wie einen "lock" zu geben (keinen log ;))
wenn der die file läd .. sind keine anderen pages auf meinem server ansurfbar.. ist die file fertig runtergeladen, bzw. breche ich den download ab.. sind die site die ich versucht habe zu öffnen sofort da..
also: eine file wird runtergeladen .. von irgendwem.. ->
keine weiteren seiten können so lange aufgerufen werden bis der dl beendet wurde..
das kann's ja irgendwie auch ned sein ;)
irgendwie scheint es da irgendwie sowas wie einen "lock" zu geben (keinen log ;))
wenn der die file läd .. sind keine anderen pages auf meinem server ansurfbar.. ist die file fertig runtergeladen, bzw. breche ich den download ab.. sind die site die ich versucht habe zu öffnen sofort da..
also: eine file wird runtergeladen .. von irgendwem.. ->
keine weiteren seiten können so lange aufgerufen werden bis der dl beendet wurde..
das kann's ja irgendwie auch ned sein ;)
-
- Posts: 15
- Joined: 2007-04-30 16:31
- Location: Mendencity
Re: Download mit PHP und Sessions absichern..
So nun geht es endlich einwandfrei..
Also jedermann der vorhat seine Downloads dahingehend abzusichern, dass diese nur von seiner Seite aus aufgerufene werden können und verhindern möchte, dass Fremdseiten direkt auf die herunterladbaren Dateien verlinken, findet bestimmt Gefallen an folgendem Script.
(Ich benutze noch zusätzlich das mod_rewrite module - um die urls "schicker zu machen")
und ganz wichtig.. -> das ganze funktioniert jetzt auch ohne speicher-exzesse oder absolute prozessorauslastung! :-D
Have Phun
Also jedermann der vorhat seine Downloads dahingehend abzusichern, dass diese nur von seiner Seite aus aufgerufene werden können und verhindern möchte, dass Fremdseiten direkt auf die herunterladbaren Dateien verlinken, findet bestimmt Gefallen an folgendem Script.
(Ich benutze noch zusätzlich das mod_rewrite module - um die urls "schicker zu machen")
Code: Select all
// we're going to tell the browser what filetype the file should become
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false);
header ( "Content-Type: application/octet-stream" );
// we're going to tell the browser what filesize the file is
header( "Content-Length: ".$file['file_size'] );
// we're going tell the browser what filename the file should get
header( 'Content-Disposition: attachment; filename="'.$filename.'"' );
// now we're going to include the whole filecode
function readfile_chunked($filename,$retbytes=true) {
$chunksize = 1*(1024*1024); // how many bytes per chunk
$buffer = '';
$cnt =0;
// $handle = fopen($filename, 'rb');
$handle = fopen($filename, 'rb');
if ($handle === false) {
return false;
}
while (!feof($handle)) {
set_time_limit(0);
$buffer = fread($handle, $chunksize);
echo $buffer;
ob_flush();
flush();
if ($retbytes) {
$cnt += strlen($buffer);
}
}
$status = fclose($handle);
if ($retbytes && $status) {
return $cnt; // return num. bytes delivered like readfile() does.
}
return $status;
}
readfile_chunked($datafile);
exit;
und ganz wichtig.. -> das ganze funktioniert jetzt auch ohne speicher-exzesse oder absolute prozessorauslastung! :-D
Have Phun