Ich würde das mit AJAX probieren, um den Timeout des PHP-Hosters zu umgehen. Der Client wartet dann halt dazwischen und teilt dem Server anschließend mit, wie viele Bytes bereits geladen wurden. Der Server schaut nach, ob mittlerweile ein neuer Chunck/Block bereitsteht oder meinetwegen auch, was die neue Dateigröße ist, und liefert den aus. Wenn der Server die Datei schneller schreibt als der Downloader, könnte natürlich auch die Chunk-Größe erhöht werden (solange sie nicht gegen das PHP-Timeout stößt) oder die Wartezeit beim Client heruntergehandelt werden. Problem könnte allerdings sein: wohin mit den heruntergeladenen Daten? JavaScript darf ja vermutlich nicht einfach irgendwo im Dateisystem schreiben, und gut, man könnte die Daten in den WebStorage des Browsers schreiben, aber der hat möglicherweise auch ein Größenlimit und das Problem bleibt weiter ungelöst: wie kann man dem Nutzer in JavaScript einen "Speichern-Unter"-Dialog bieten, der dann die Daten vom WebStorage in den gewünschten Zielpfad kopiert? Und letztendlich käme dieser Kopiervorgang am Schluss noch dazu, obwohl die Daten lokal ohnehin schon vorliegen.