Hi,
Die Frage, die uns alle bewegt: Warum zum Teufel in 10KB-Schritten? Ohne diese Anforderung wäre dein Problem keines - und schätzungsweise denkst du zu kompliziert für deine Lösung.
Es muss oder besser sollte eben in 10 KB oder von mir aus auch 100 KB Schritten erfolgen. Sinn ist es eine Trafficbeschränkung für einzelne Dateien, ein bischen zu umgehen in dem eben nur kleine Pakete geladen werden.
Ich verstehe den Sinn immer noch nicht. Würdest du etwas mehr ins Detail gehen - oder würde das dein Tun als illegal demaskieren? :)
Ich habe zu testzwecken auch einmal versucht, alles direkt zu empfangen ohne einzelne Pakete. Hat aber bei der besagten 168 KB Datei, genausolange gedauert. Und das ganze lief bei mir lokal wo Java Prog und Webserver mit der Testdatei auf einem Rechner laufen. Könnte es sein, das es in Java viel Zeit kostet InputStreams und FileStreams jedesmal neu zu deklarieren?
Ich habe keine Ahnung von Java.
Was mich jedoch etwas mehr interssieren würde, waäre wie man in PHP etwas wie fseek() auch auf URL FileHHandles anwenden kann?
Nein, das geht aus guten Gründen nicht: Wenn man mitten in die Datei "greifen" will, muss man sie komplett vorliegen haben. Auf Festplatte liegt sie komplett vor, der Zugriff auf die Mitte oder das Ende ist problemlos. Im Netz besteht das Problem, dass ein HTTP-Datenstrom immer von vorne an gelesen werden muss, um bis zur Mitte zu gelangen. Danach ist aber kein Zurückspringen weiter nach vorn mehr möglich etc.
Du hast zwei Möglichkeiten: Entweder du lädst mit PHP die HTTP-Ressource komplett herunter und speicherst sie in einer temporären Datei auf der Festplatte - dann kannst du mit fseek() arbeiten. Oder du lernst "HTTP" zu sprechen und beschäftigst dich mit den Möglichkeiten, vom Webserver Teilbereiche von Ressourcen abzufragen (auf diese Weise arbeiten z.B. Download-Manager, indem sie die große Datei in einzelnen kleineren Stücken abfragen und parallel runterladen - bringt wohl tatsächlich kleine Geschwindigkeitsvorteile). Dazu müsstest du aber mit fsockopen() eine TCP-Verbindung zum Webserver herstellen - und auf seine Reaktion entsprechend reagieren, denn der Server muß nicht zwingend mit Statuscode 206 Partial Content antworten (das wäre eine gute Antwort für dich, weil dann der gewünschte Dateiausschnitt kommt).
- Sven Rautenberg