Archiv verlassen und diese Seite im Standarddesign anzeigen : 500 Fehler während Download
Hallo,
ich hebe folgendes Problem.
Ich schreibe grad an einer Webseite wo man auch etwas downloaden kann.
Per klick auf einen Link öffnet sich ein kleines PopUp in dem der Download startet.
Sobald der Download startet, ist ein weiter surfen auf der Seite nicht möglich.
Es gibt einen Error 500 - Internal server error
Hat vielleicht jemand eine Ahnung woran das liegen könnte?
Kann das eventuelle an falsche Servereinstellungen liegen?
Gruß Nordin
streuner 17-05-2011, 14:16 Hi.
Ohne Quellcode wird man da nichts sagen können - deine Angaben sind da viel zu wage:dontknow:.
mfg streuner
Folgender Code lädt die Datei herunter:
$file = $sourcedir."/ordner/datei.zip";
$size = filesize($file);
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/zip");
header('Content-Length: '.$size);
header('Content-Disposition: inline; filename="datei.zip"');
header('Content-Transfer-Encoding: binary');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
$bis = 1024*1024;
$count = round($size/(int)$bis);
$handle = fopen ($file, "r");
for ($i=0;$i<=$count;$i++) {
$ftell = ftell($handle)+$bis;
$content = fread ($handle, $bis);
fseek($handle,$ftell);
echo $content;
}
fclose ($handle);
Mit fopen() arbeite ich weil es Dateien gibt die für den download scheinbar zu groß sind. Die Datei war vor der Nutzung mit fopen immer beschädigt. Seit dem ich fopen nehme kommt sie unbeschädigt an. könnte es am fopen liegen?
@streuner
Hast eine Vermutung woran es liegen könnte?
streuner 18-05-2011, 07:51 Hi.
Check mal:
500 Internal Server Error - 500 Internal Server Error Message Displays in Browser Window - 500 Error (http://pcsupport.about.com/od/findbyerrormessage/a/500servererror.htm)
How do I fix a ‘500 Internal Server Error’ on my website? Netfirms Support Center (http://support.netfirms.com/coding/errors/how-do-i-fix-a-500-internal-server-error-on-my-website)
mfg streuner
Ah ok, am logischsten scheint mir "PHP Coding Timing Out".
Bei einer Datei mit ca. 200MB wird ja das fopen bzw. das fread immer und immer wieder ausgeführt bis es fertig ist. Aber das muss ja, da die Datei ja fertig geladen werden muss. Sobald die for-Schleife durchgelaufen und die Datei somit fertig heruntergeladen ist, funktioniert alles wieder.
Also liegt es sicher auf der Hand das die for-Schleife schuld hat.
Aber wie kann ich es lösen das es kein time out gibt?
eagle275 18-05-2011, 09:45 setze einfach
set_time_limit(0); vor dem Code ... allerdings kannst du deine Schleife MASSIV kürzen
ich verwende folgenden Code
$Dateiname = basename($Datei);
$Groesse = filesize($Datei);
$file=fopen($Datei,'r');
set_time_limit(0);
if ($file) {
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/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
header("Content-Disposition: attachment; filename=\"".$Dateiname."\";");
header("Content-Description: File Transfer");
header("Content-Transfer-Encoding: binary");
header('Content-Length: '.$Groesse );
flush();
while (!feof($file)) {
print(fread($file,4096));
flush();
}
}
fclose($file);
die();
Hallo,
vielen Dank erstmal für den Hinweis mit der Schleife. Habe es entsprechend angepasst.
Auch das set_time_limit(0); habe ich eingefügt. Dennoch ist ein weiter surfen während des Downloads nicht möglich. nach 40 Sekunden kommt immernoch der 500 Fehler :(
eagle275 18-05-2011, 10:37 hast du einen eigenen Server , oder lässt du es (free)hosten ? - nicht wenige Hoster verbieten den Zugriff auf das Time-limit ....(eigentlich sogar so gut wie alle, wenn du nicht gerade einen Root-Server angemietet hast)
Habe nen eigenen... kann also alternativ auch per htaccess was ändern.
Verwendest du Sessions ...?
Jap. Der User muss sich erst einloggen.
eagle275 18-05-2011, 14:24 hmm .. ich nehm auch sessions - aber nen 500er beim Download hab ich noch nicht gesehn ...
Dann könnte es der übliche Fall sein, dass dein Downloads-Script über seine gesamte Laufzeit den Zugriff auf die Session-Datei sperrt, so dass alle anderen Scripte ("normales Weitersurfen") darauf nicht zugreifen können.
Probiere im Downloadscript die Session mit session_write_close zu schließen, sobald du mit der Überprüfung der Zugriffsberechtigung fertig bist, und bevor du den Dateiinhalt an den Client schickst.
--gelöscht--
//EDIT
Hat scheinbar funktioniert. Danke.
|