Ankündigung

Einklappen
Keine Ankündigung bisher.

Post mit php simulieren und anschließend entzippen

Einklappen

Neue Werbung 2019

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

  • Post mit php simulieren und anschließend entzippen

    Hallo,

    ich möchte mich auf unseren Server verbinden, um ein Zip-File regelmäßig herunter zu laden das CSV-Daten, enthält.

    Die ist allerdings nur über einen POST möglich, GET wird nicht akzeptiert, ich muss also ein POST Formular mit PHP simulieren, dies an einen Server schicken, die Antwort des Servers abwarten, da sollte ein ZIP kommen, und dieses mittels PHP entpacken? Der Rest ist dann kein Problem mehr, ich hätte also folgendes Problem:

    *Wie kann ich ein Post-Formular mit PHP an einen Server schicken (ohne dass diese Formular wirklich existiert) samt Formulardaten.

    *Wie kann ich im selben Zug die Antwort, in Form eines Zip-Files auslesen.

    *Wie kann ich mit PHP das Zip entpacken, um an das CSV zu kommen.


    Bitte um viele hilfreiche Antworten...


    Danke im Voraus

    Lg

    kdojgd

  • #2
    Hallo,

    für POST habe ich früher PEARs HTTP_Request benutzt:
    HTTP_Request
    "[URL="http://www.youtube.com/watch?v=yMAa_t9k2VA&feature=youtu.be&t=25s"]Mein Name ist Lohse, ich kaufe hier ein.[/URL]"

    Kommentar


    • #3
      Zend_Http_Client wäre auch eine Option. Zum Entpacken des Zips bietet sich unter PHP natürlich ZipArchive an.

      Im Grunde alles nicht besonders schwierig, wenn man die Klassen erstmal korrekt eingebunden und ein wenig Doku gelesen hat. (Ist einfacher, als es aussieht.)

      Kommentar


      • #4
        Mit fsockopen() sendest Du einen POST-Request ab. Bei php.net ist ein GET-Beispiel, aber in den Kommentaren siehst Du wie POST aussehen muss.

        Mit while (!feof($fp)) { liest Du dann die Zip-Datei ein und schreibst sie parallel mit einem neuen Filepointer über fopen() auf die Platte.

        Nun entpackst Du das zip z.B. mit zip_open().

        Für den CSV-Datensatz gibt es dann fgetcsv().

        Alles in allem aber nervige Filter-Arbeit (jede CSV hat andere Spalten), fehleranfällig (csv wird gerne unterschiedlich formatiert, Escapezeichen vergessen usw.) und cpu-lastig, weil man ständig mit großen Datenmengen arbeiten muss.

        Viel besser wäre es, wenn der entsprechende Anbieter eine Schnittstelle realisieren würde, die man per Offset zeilenweise in einem besseren Format wie z.B. JSON, Serial oder XML auslesen kann.
        meine PHP Scripte

        Kommentar


        • #5
          Zitat von hondatuner Beitrag anzeigen
          weil man ständig mit großen Datenmengen arbeiten muss.
          PHP: fgetcsv - Manual
          PHP: fgets - Manual
          Beides zeilenweise, also sollte sich die Datenmenge in Grenzen halten.

          Und lieber ein einmaliger Download als mit jedem Offset eine Verbindung aufbauen und den gesamten Protokoll-Overhead mitschleppen.
          VokeIT GmbH & Co. KG - VokeIT-oss @ github

          Kommentar


          • #6
            Mit Datenmenge meinte ich nicht in den RAM zu schaufeln, sondern das man entsprechend lange warten muss bis die Ausführung beendet ist. Entsprechend kann man so ein Script meist nur manuell bzw. mit Cronjobs anstoßen.

            Deine weitere Ausführung ist falsch. Mit Offsets kannst Du gezielt die Inhalte laden, die Du brauchst. D.h. Du sparst Dir beim 2. Update 90% der Daten neu einzulesen. So viel Overhead kannst Du gar nicht produzieren. Das setzt aber natürlich voraus, dass die Schnittstelle entsprechende Filter enthält.
            meine PHP Scripte

            Kommentar


            • #7
              Öhm...ich weiß ja nicht, mit was für Offsets du arbeiten möchtest - aber wenn es sagen wir mal täglich neue Daten gibt sparst du überhaupt nichts.
              100 neue Datensätze sind 100 Datensätze - gezipped ein einmaliger Download, per Offset-API
              VokeIT GmbH & Co. KG - VokeIT-oss @ github

              Kommentar


              • #8
                Üblicherweise sind Zip-Pakete nicht mit neuen Datensätzen gefüllt, sondern mit allen, weil der Anbieter nicht weiß welche Daten bereits im Umlauf sind. Kommt aber auf den Verwendungszweck / Dateninhalt an.
                meine PHP Scripte

                Kommentar


                • #9
                  Du hast komische Vorstellungen davon, was üblich ist.
                  Es kommt mindestens genauso oft vor, dass tagesaktuelle Daten zur Verfügung gestellt werden.
                  Aber die Diskussion bringt eh nichts.
                  VokeIT GmbH & Co. KG - VokeIT-oss @ github

                  Kommentar

                  Lädt...
                  X