da von meiner website nur bestimmte, eingeloggte personen etwas downloaden können, lege ich meine files außerhalb des webverzeichnisses ab und kopier sie bei bedarf direkt in stdout.
yo. funktioniert auch super mit einer 6mb großen datei. wahrscheinlich auch mit einer 8mb großen.
versuche ich aber eine 20mb große datei downzuladen, so dauert es zuerst einige sekunden, bis das downloadfenster erscheint. wähle ich dann „speichern unter“, wird nur eine 0 byte große datei erstellt.
sofort inspizierte ich die php.ini, und stellte das memory_limit und die max_execution_time auf „genügend“:
max\_execution\_time = 180 ; Maximum execution time of each script, in seconds
memory\_limit = 64M ; Maximum amount of memory a script may consume (8MB)
tjo. funkt trotzdem nicht. statt readfile fpassthru zu verwenden hilft ebenfalls nix …
weiß irgendwer, was da der fehler sein könnte? vielen dank.
versuche ich aber eine 20mb große datei downzuladen, so dauert
es zuerst einige sekunden, bis das downloadfenster erscheint.
wähle ich dann „speichern unter“, wird nur eine 0 byte große
datei erstellt.
ist vielleicht trivial aber: Bist du sicher, dass die angegebene Datei auch existiert? Bei 0 byte könnte der Pfad oder Dateiname nicht gefunden worden sein.
Ansonsten: Schalte mal die Header ab und schau mal was im Browser ankommt. Vielleicht ist ja eine hilfreiche Fehlermeldung dabei.
aber - die datei existiert. es scheint eine speichergrenze bei 8mb zu geben, die nicht von php vorgegeben wird (php.ini schon modifiziert) - vielleicht von apache.
wenn es also eine 8mb speichergrenze gibt, und es funkt bei readfile nicht, scheint das problem darin zu liegen, dass readfile den gesamten inhalt der datei ausliest, und dann erst auf stdout ausgibt.
also dann halt selbst, und päckchenweise, damit phps speicher nicht überlastet wird:
jetzt funkt aber beinahe noch weniger als vorher - der download startet jetzt zwar auch bei beliebig großen files, aber
(1) wird der filename nicht mehr angezeigt, stattdessen der scriptname des php-files.
(2) die fertig downgeloadete datei scheint ebenfalls korrupt zu sein.
naürlich scheint es: ein headerproblem. aber wtf! wenn ichs mit readfile statt á 1024 blocks mache, passiert das ja nicht. also kein headerproblem. oder doch? muss ich vielleicht woandershin als stdout schreiben? hilfe!