Hi!
Ja, außerdem kann es sein, das da sehr große Dateien bei sind (200 Mb) die will ich nicht alle 10 mal kopieren.
brauchst Du ja nicht. Du kannst die Datei - egal wo sie liegt, mit der von mir genannten Funktion einlesen, entsprechende HEader vorausschicken, und mit der Funktion öffnen und an den Client ausgeben, das sollte auch mit mehreren Clients gleichzeitig gehen.
Für den Download wollte ich eigentlich apache verwenden, nicht ein weiterleitendes PHP-Script
dann kannst Du es vergessen, denn HTTP ist normalerweise Zustandslos, Du kannst also nicht wirklich ermitteln wieviele Leute gleichzeitig noch dabei sind die Datei runterzuladen. Naja, theoretisch müsste es zwar gehen, ich wüßte aber nicht wie mit dem Apache, außer Du schreibst einen eigenen HTTP-Server der sowas kann.
Wieso sollte man das tun? Was für Daten würdest Du in die globalen Variablen schreiben? Würden die während der Laufzeit eines Scriptes verändert oder was? Aber was willst Du da synchronisieren?
Beispielsweise einen LOCK, der dafür sorgt, dass nur ein script gleichzeitig auf eine Datei zugreift...
dafür gibt es flock(), damit kannst Du eine Datei mi einem exklusiven Lock versehen, so kann nur ein Prozess auf diese Datei zugreifen.
Nur wenn Du volle Gewalt über die PHP-Konfiguration hast(Scriptlaufzeiten...)
hätte ich, aber das ist ja auch ne sicherheitslücke ...
Ja, wenn Du Dich nicht auskennst ;-)
Was ich meinte, damit das mit der Ausgabe über ein PGP-Script funktioniert, zumindest bei längeren Dwnloads, musst Du das Lauifzeit-Limit der PHP-Scripe deutlich hochschrauben. Wieso soll das ein Sicherheitsrisiko sein? Das machst Du einmal in der php.ini udn gut ist.
Also, bei der oben angesprochenen Lösung (fileshack) funktioniert das ganhze oberflächlich so: Ein User connected auf die Downloadseite. Da sieht er eine Ansicht, die ihm sagt er ist der x. in der Warteschlange. Diese Seite updated sich selber alle 2ß sec. Nach den 20 sec kommt entweder na andere Warteschlangennummer, oder ein Download beginnt.
So habe ich mir das auch vorgestellt, nur: Wie kann ich die user speichern, die in ner Warteschlange sind (ZB Global =) ) Und wie bekomme ich heraus, ob die leute aus meinem Tollen System ausgestiegen sind.
Das einfachste wäre wohl wirklich eine Datenbank-Tabelle, da könntest Du z.B. 2 Tabellen erstellen, 1. Tabelle que und eine Tabelle downloads.
In die Tabelle downloads schreibst Du bei einem beginnenden Downlaod über ein PHP-Script halt einen Datensatz für diesen Client rein, wenn der Downlaod. beendet ist, also direkt wenn fpassthru fertig ist, löscht Du den Datensatz wieder, bei jedem neuen Download-Request prüfst Du ob in diese Tabelle mehr als z.B. 10 Datensätze sind, wenn dem so ist komtm der User in die Tabelle que, sonst kommt er in die Tabelle downloads und Du startest den download. Wenn Du den USer in die Que geschrieben hast schickst Du ihm dann eine HTML-Seite mit einem meta-refresh oder sowas, und der ID, die damit Du ihn später wiedererkennen kannst, um ggfs. den Datensatz aus der Que zu löschen. Wenn nach x Minuten kein Refresh von einem Client gekommem ist, löscht Du den Datensatz ebenfalls und der Gute fliegt so aus der que. HIerzu musst Du also noch den letzten Refresh-Zeitpunt als timestamp in der Tabelle speichern.
Mir Viele da folgendes ein:
Ein PHP-Script, dass jedem user erstmals ne eindeutige ID zuweist. Über diese ID wird er eindeutig in die Warteschlange eingeordnet.
Wenn er nicht regelmäßig auf der Seite reloaded (was sie ja von alleine macht) dann verfällt seine ID.
genau.
Allerdings bräuchte ich ja eine art Aufräumprozess, der die IDs nach abgelaufenem Timeout entfernt...
Diese Aktion kannst Du ja bei jedem Request nebenbei durchführen. Alle Datensätze aus der DB löschen deren letzte Refresh > x Minute beträgt.
Mit MySQL würde das sicherlich gehen (zusammen mit nem Java-Daemon zB) Aber ich kenne mich da nicht sooo aus.
Ja, und mit PHP auch. Wenn Du also die Laufzeit verändern kannst ist das ganze kein Problem.
Grüße
Andreas