Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
500 Fehler während Download [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
500 Fehler während Download


 
Nordin
17-05-2011, 14:11 
 
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

 
Nordin
17-05-2011, 14:33 
 
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?

 
Nordin
18-05-2011, 00:03 
 
@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

 
Nordin
18-05-2011, 09:24 
 
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();

 
Nordin
18-05-2011, 10:20 
 
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)

 
Nordin
18-05-2011, 11:32 
 
Habe nen eigenen... kann also alternativ auch per htaccess was ändern.

 
wahsaga
18-05-2011, 11:53 
 
Verwendest du Sessions ...?

 
Nordin
18-05-2011, 13:50 
 
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 ...

 
wahsaga
18-05-2011, 14:50 
 
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.

 
Nordin
18-05-2011, 15:09 
 
--gelöscht--

//EDIT
Hat scheinbar funktioniert. Danke.


Alle Zeitangaben in WEZ +2. Es ist jetzt 13:40 Uhr.