Permafr0st: exec('wget..) xml, filenamen ändern

hallo
wir haben eine HTTP Resource, die XML ausgibt. die hole ich mir mit
$wg = exec('wget -q -c -b $resource',$out);

Das abholen klappt wurderbar, es wird das XML in einem File gespeichert, welches aber den Namen der aufrufenden Resource hat, sprich den Querystring. Auch die endung .xml fehlt.

Nun will ich das XML mit dem "PEAR XML Unserializer" zerlegen und verwursten. Auch das klappt wuderbar, solange man ein XML File hat mit einem diskreten Filename, zB.  file.xml. hab ich aber nicht, was mache ich da?

Da sich der Name der XML Datei immer ändert, komm ich wohl kaum drum rum, das DIR einzulesen, schauen welche Files da liegen und den Filename dort herauszusaugen? - dann diesen Filename dem Unserializer übergeben?

Mein Code funktioniert, ich habs mit diskreten Files getestet.

Links
http://de2.php.net/manual/de/function.exec.php

das "Swiss Army Knife" für XML
http://pear.php.net/manual/en/package.xml.xml-serializer.xml-unserializer-summary.php

Danke Gruß

  1. Hi,

    wir haben eine HTTP Resource, die XML ausgibt. die hole ich mir mit
    $wg = exec('wget -q -c -b $resource',$out);

    Das abholen klappt wurderbar, es wird das XML in einem File gespeichert, welches aber den Namen der aufrufenden Resource hat, sprich den Querystring. Auch die endung .xml fehlt.

    Nun will ich das XML mit dem "PEAR XML Unserializer" zerlegen und verwursten. Auch das klappt wuderbar, solange man ein XML File hat mit einem diskreten Filename, zB.  file.xml. hab ich aber nicht, was mache ich da?

    Die Parameter von wget anschauen, um den Namen, unter dem abgespeichert wird, vorzugeben ...?

    MfG ChrisB

    --
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
    1. Die Parameter von wget anschauen, um den Namen, unter dem abgespeichert wird, vorzugeben ...?

      MfG ChrisB

      erstmal danke. habe dazu hier
      http://wiki.ubuntuusers.de/wget
      erstmal nix gefunden. ok ich schau dann nochmal nach "man wget" bzw. "wget --help". Naja ist wohl nicht der typische Anwendungsfall des wget..

      1. Hi,

        Die Parameter von wget anschauen, um den Namen, unter dem abgespeichert wird, vorzugeben ...?

        erstmal nix gefunden. ok ich schau dann nochmal nach "man wget" bzw. "wget --help".

        -O file
        oder
        --output-document=file

        MfG ChrisB

        --
        RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
        1. Hi,

          -O file
          oder
          --output-document=file

          Hm, nee, moment - laut Beschreibung sind die nicht exakt dafür da, sondern machen noch mehr.

          MfG ChrisB

          --
          RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
          1. -O file
            oder
            --output-document=file
            Hm, nee, moment - laut Beschreibung sind die nicht exakt dafür da, sondern machen noch mehr.

            MfG ChrisB

            http://wiki.ubuntuusers.de/wget#Tarballs-automatisch-entpacken
            =>
            "..Mit -O - wird wget angewiesen die Datei direkt auf die Standardausgabe STDOUT zu schreiben...

            1. Tach auch.

              "..Mit -O - wird wget angewiesen die Datei direkt auf die Standardausgabe STDOUT zu schreiben...

              Weil für Parameter, bei denen Dateinamen angegeben werden, das '-' traditionellerweise für STDOUT steht. Aber vielleicht ist es sowieso eher das, was du anstreben solltest.

              Einer meiner Grundsätze lautet, dass ich auf das Anlegen von temporären Dateien möglichst verzichte, um mir nicht weitergehende Fehlerquellen einzuhandeln (da spricht auch die Faulheit, da ich dann eben den Fehlerbehandlungscode dazu nicht schreiben muss).

              mit "wget -O -" wird die Datei auf STDOUT gelesen, mit
              @file = wget $ressource -O -; (` = backticks) hast du sie direkt in @file. Dein XML Bibliothek wird dir sicherlich die Möglichkeit anbieten, das XML aus einem String/Array heraus zu parsen, oder?

              Bis die Tage,
              Matti

              1. Tach auch.

                du sie direkt in @file. Dein XML Bibliothek wird dir sicherlich die Möglichkeit anbieten, das XML aus einem String/Array heraus zu parsen, oder?

                Bis die Tage,
                Matti

                kann sein. die Doku schweigt sich darüber eher aus. ein anderer im PHP Forum meinte aber, ja das ginge auch.
                Naja ich habs jetzt hinbekommen 'wget -O file.xml resource'. Habe dann noch einen Ordner erstellt und dem einen 'chmod o+rwx' gegeben, schon durfte der Apache User www-data da reinschreiben...
                gibt halt viele Wege nach Rom und einer ist der eleganteste :-)

                1. Hi.

                  du sie direkt in @file. Dein XML Bibliothek wird dir sicherlich die Möglichkeit anbieten, das XML aus einem String/Array heraus zu parsen, oder?

                  kann sein. die Doku schweigt sich darüber eher aus. ein anderer im PHP Forum meinte aber, ja das ginge auch.
                  Naja ich habs jetzt hinbekommen 'wget -O file.xml resource'. Habe dann noch einen Ordner erstellt und dem einen 'chmod o+rwx' gegeben, schon durfte der Apache User www-data da reinschreiben...
                  gibt halt viele Wege nach Rom und einer ist der eleganteste :-)

                  http://pear.php.net/manual/en/package.xml.xml-serializer.xml-unserializer.unserialize.php (wenn ich das deinem erstem Posting richtig entnehme) schreibt eigentlich sehr deutlich, dass du ihm als ersten Parameter statt einem Dateinamen auch direkt den Inhalt übergeben kannst.

                  Also etwa so:

                    
                  $unserializer->unserialize(join('', `wget $ressource -O -`));  
                  
                  

                  Bis die Tage,
                  Matti

          2. Moin!

            Hi,

            -O file
            oder
            --output-document=file

            Hm, nee, moment - laut Beschreibung sind die nicht exakt dafür da, sondern machen noch mehr.

            Doch doch. Die sind genau dafür da:

            $file="/pfad/testfile.xml";
            $wg = exec("wget -O $file -q -c -b $resource",$out);

            Er muss noch die Quotas ändern. in einfachen Quotas übergibt er:

            wget -O /pfad/testfile.xml -q -c -b $resource

            an die Shell und dort ist $ressource natürlich leer.

            MFFG (Mit freundlich- friedfertigem Grinsen)

            fastix

            1. Hi,

              -O file
              oder
              --output-document=file

              Hm, nee, moment - laut Beschreibung sind die nicht exakt dafür da, sondern machen noch mehr.

              Doch doch. Die sind genau dafür da:

              Liest sich aber anders:
              “Use of -O is *not* intended to mean simply "use the name file instead of the one in the URL;" rather, it is analogous to shell redirection: wget -O file http://foo is intended to work like wget -O - http://foo > file; file will be truncated immediately, and *all* downloaded content will be written there.”

              Kann man vielleicht im vorliegenden Fall trotzdem benutzen; man sollte sich aber über die eigentliche Bedeutung/Aufgabe im klaren bleiben.

              MfG ChrisB

              --
              RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
              1. Moin!

                wget -O testfile http://example.org/

                holt den Stuff von example.org und schreibt ihn in die Datei testfile im aktuellen Verzeichnis.

                http://blog.fastix.de/post/897736561/ueber-den-richtigen-umgang-mit-wget

                MFFG (Mit freundlich- friedfertigem Grinsen)

                fastix