| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |

17-05-2011, 14:11
|
|
Nordin
Registrierter Benutzer
|
|
Registriert seit: Aug 2005
Ort: DE / S-A
Beiträge: 396
|
|
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
|

17-05-2011, 14:16
|
|
streuner
Registrierter Benutzer
|
|
Registriert seit: Aug 2009
Ort: Lüneburg
Beiträge: 461
|
|
Hi.
Ohne Quellcode wird man da nichts sagen können - deine Angaben sind da viel zu wage  .
mfg streuner
__________________
Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert,
der letzte Netzknoten verkommerzialisert ist, werdet Ihr merken, dass Geld nicht von alleine programmiert.
"Diese Software verdient die 3 großen GGG: --- Gesehen --- Gelacht --- Gelöscht ---"
|

17-05-2011, 14:33
|
|
Nordin
Registrierter Benutzer
|
|
Registriert seit: Aug 2005
Ort: DE / S-A
Beiträge: 396
|
|
Folgender Code lädt die Datei herunter:
PHP-Code:
$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?
Geändert von Nordin (17-05-2011 um 14:53 Uhr)
|

18-05-2011, 00:03
|
|
Nordin
Registrierter Benutzer
|
|
Registriert seit: Aug 2005
Ort: DE / S-A
Beiträge: 396
|
|
@streuner
Hast eine Vermutung woran es liegen könnte?
|

18-05-2011, 07:51
|
|
streuner
Registrierter Benutzer
|
|
Registriert seit: Aug 2009
Ort: Lüneburg
Beiträge: 461
|
|
__________________
Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert,
der letzte Netzknoten verkommerzialisert ist, werdet Ihr merken, dass Geld nicht von alleine programmiert.
"Diese Software verdient die 3 großen GGG: --- Gesehen --- Gelacht --- Gelöscht ---"
|

18-05-2011, 09:24
|
|
Nordin
Registrierter Benutzer
|
|
Registriert seit: Aug 2005
Ort: DE / S-A
Beiträge: 396
|
|
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?
|

18-05-2011, 09:45
|
|
eagle275
Registrierter Benutzer
|
|
Registriert seit: Jun 2010
Beiträge: 371
|
|
setze einfach
PHP-Code:
set_time_limit(0);
vor dem Code ... allerdings kannst du deine Schleife MASSIV kürzen
ich verwende folgenden Code
PHP-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();
__________________
Wer LESEN kann, ist klar im Vorteil!
|

18-05-2011, 10:20
|
|
Nordin
Registrierter Benutzer
|
|
Registriert seit: Aug 2005
Ort: DE / S-A
Beiträge: 396
|
|
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
|

18-05-2011, 10:37
|
|
eagle275
Registrierter Benutzer
|
|
Registriert seit: Jun 2010
Beiträge: 371
|
|
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)
__________________
Wer LESEN kann, ist klar im Vorteil!
|

18-05-2011, 11:32
|
|
Nordin
Registrierter Benutzer
|
|
Registriert seit: Aug 2005
Ort: DE / S-A
Beiträge: 396
|
|
Habe nen eigenen... kann also alternativ auch per htaccess was ändern.
|

18-05-2011, 11:53
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 24.486
|
|
Verwendest du Sessions ...?
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
|

18-05-2011, 13:50
|
|
Nordin
Registrierter Benutzer
|
|
Registriert seit: Aug 2005
Ort: DE / S-A
Beiträge: 396
|
|
Jap. Der User muss sich erst einloggen.
|

18-05-2011, 14:24
|
|
eagle275
Registrierter Benutzer
|
|
Registriert seit: Jun 2010
Beiträge: 371
|
|
hmm .. ich nehm auch sessions - aber nen 500er beim Download hab ich noch nicht gesehn ...
__________________
Wer LESEN kann, ist klar im Vorteil!
|

18-05-2011, 14:50
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 24.486
|
|
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.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
|

18-05-2011, 15:09
|
|
Nordin
Registrierter Benutzer
|
|
Registriert seit: Aug 2005
Ort: DE / S-A
Beiträge: 396
|
|
--gelöscht--
//EDIT
Hat scheinbar funktioniert. Danke.
Geändert von Nordin (18-05-2011 um 15:14 Uhr)
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|