Ankündigung

Einklappen
Keine Ankündigung bisher.

FTP-Download [Ladebalken?]

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • FTP-Download [Ladebalken?]

    Nunja, hallo PHP.de Community, und entschuldigung, dass mir kein treffenderer Name eingefallen ist.

    Zu aller erst, ich wusste jetzt nicht wohin mit meinem Thread da er aus PHP/JavaScript bzw AJAX besteht.

    Im Grunde geht es um folgendes:

    Ich habe es bereits geschafft, mit PHP Dateien mit einer Bestimmten endung aus einem Ordner auf einem FTP-Server auszulesen und aufzulisten.

    In diesem Fall: *.dem

    Der FTP-Server gehört zu einem Gaming-Server, bei dem nach jedem Spiel eine Datei mit dem Format:

    auto-YYYYMMDD-HHmm-[kartenname].dem

    Ich habe es also nun geschafft, diese nach dem Datum zu sortieren usw.

    Nun möchte ich aber dem User diese zum Download bereitstellen, habe aber bisher nur 2 Möglichkeiten gefunden:

    1. Es sollte ja per ftp://user: pass@ip: port/dir/*.dem gehen, aber das wäre mir zu Unsicher.
    2. Mit ftp_get die gewollte Datei auf den Server wo PHP läuft herunterzuladen (vorher überprüfen ob diese nicht schon vorhanden ist).
    Von hier aus wäre es nun möglich die Datei einfach herunterzuladen.

    Nur sind diese Dateien gerne bis zu 40 MB groß, und deswegen würde der User wahrscheinlich irgendwann einfach die Seite verlassen (selbst mit einem Hinweis auf eine lange Wartezeit), und deswegen würde ich gerne einen Fortschrittsbalken anzeigen.
    Entweder mit JavaScript oder AJAX.

    Ist soetwas überhaupt möglich?

    Oder könnte man nicht per Cronjobs, jede Stunde nach neuen *.dem Files schauen und diese dann auf den anderen FTP kopieren, sodass diese direkt zur verfügung stehen? Nur leider weiß ich gerade nicht, ob mein Hoster Cronjobs anbietet bzw wie man diese verwendet.

    Ich bedanke mich erstmal im vorraus für alle hilfreichen Antworten.

    MfG
    Manuel Erdmann


  • #2
    Das ist leider nicht möglich da PHP vollständig Synchron arbeitet. Asynchrone Befehle gibt es bei PHP nicht.
    Zitat von nikosch
    Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

    Kommentar


    • #3
      Kannste beides machen
      Cronjob.de - Kostenlose Cronjobs und Crontab
      cu
      Grüße
      Destruction
      "Dummheit redet viel..Klugheit denkt und schweigt.." [Amgervinus]

      Kommentar


      • #4
        Ah, gut Danke .
        Ich dachte schon ich muss meine Idee ganz verwerfen .

        Vielen Dank .

        Kommentar


        • #5
          Kleine zusatzfrage noch von mir.

          Kann man dem Server nicht irgendwie sagen: "wenn eine datei im verzeichnis x landet, schiebe sie auf y"? ggf. noch mit einer auswahl an endungen z.b. *.x zu y und *.y zu z

          Kommentar


          • #6
            Kannst auch einfach ein PHP-Script als Proxy benutzen, dann wird der Download beim User sofort gestartet und nicht erst, wenn die Datei komplett auf den Server geladen wurde.

            PHP-Code:
            $handle fopen('ftp://deine.daten/pfad/zur/demo.dem');
            while(!
            feof($handle)) {
                echo 
            fgets($handle2048);
            }
            fclose($handle); 

            Kommentar


            • #7
              solange noch schreibend auf demo.dem zugegriffen wird
              wird fopen wohl schiefgehn.

              fopen ist erst möglich wenn die Datei komplett oben ist.
              Eine if-else-Abfrage nimmt, ordentlich geschrieben eine Menge Platz weg. Platzsparend geht es mit einem ternären Operator.

              Kommentar


              • #8
                Das ist ja kein Problem, man will die Demo ja auch erst runderladen sobald sie fertig ist. Mit der Lösung wird sie halt einfach weitergereicht ohne auf dem Webserver zwischengespeichert zu werden.
                Lesen kann man die Demo auch per FTP nich, solange sie noch nicht geschlossen ist.

                Kommentar


                • #9
                  Zitat von draco88 Beitrag anzeigen
                  Kannst auch einfach ein PHP-Script als Proxy benutzen, dann wird der Download beim User sofort gestartet und nicht erst, wenn die Datei komplett auf den Server geladen wurde.

                  PHP-Code:
                  $handle fopen('ftp://deine.daten/pfad/zur/demo.dem');
                  while(!
                  feof($handle)) {
                      echo 
                  fgets($handle2048);
                  }
                  fclose($handle); 
                  Ich hab es mal mit deiner Variante probiert, aber er läd und läd und läd.

                  Rufe ich die Datei direkt in meinem Browser auf (ftp://namew@iport/pfad/datei.dem), startet der Download sofort.

                  EDIT:
                  Habe es nun zum laufen gekriegt, allerdings läd er die Datei nicht runter, sondern parsed sie, was bei 40MB ne menge Daten bedeutet, welche in den Browser geladen werden.

                  EDIT2:
                  Habe es nun Temporär über ein 0*0px Borderloses iFrame mit dem Ziel der Datei gelöst.

                  Kommentar

                  Lädt...
                  X