mark: Unzip & deserialisieren

Hallo
ich hab da wieder mal ein Problem.
In einer DB habe ich ein Blob. In dem steckt ein serialisiertes und gezipptes Array. Mit PHP kommt man folgendermaßen drann:

$blob = unserialize(gzuncompress($all[$i]['blobfield']));
$text = $blob['dim1']['dim2']['dim3'];

"$all[$i]['blobfield']" ist das Feld im Result set.

Das Problem:
Ich müsste selbiges mit Java Script hinbekommen. Geht das überhaupt? Kann JS entzippen und ggf. ein PHP Array deserialisieren?

greetz
Mark

PS: Bitte nicht nach Sinn oder Unsinn fragen. Der Blob ist da, ich muss drann und mir steht in dem Falle nur JS zur Verfügung.

  1. Hallo mark.

    Ich müsste selbiges mit Java Script hinbekommen. Geht das überhaupt? Kann JS entzippen und ggf. ein PHP Array deserialisieren?

    Für letzteres könntest du dir selbst eine Funktion schreiben, wenn die Quell- und Zielstruktur mehr oder weniger eindeutig festgelegt ist. Doch das Dekomprimieren wirst du so ohne weiteres nicht umgesetzt bekommen. Ich kann mir gerade auch nicht vorstellen, das JS überhaupt mit Binärdaten umgehen kann.

    Einzige Möglichkeit, die mir hierzu noch einfällt: kontaktiere per XMLHttpRequest dein PHP-Script und lasse dieses die Arbeit übernehmen. Den dekomprimierten und ggf. auch schon deserialisierten Array kannst du dann an JS übergeben und dort verarbeiten. (Für letzteres bietet sich oft JSON an. PHP bietet seit Version 5.2.0 dafür direkt eine Schnittstelle.)

    PS: Bitte nicht nach Sinn oder Unsinn fragen. Der Blob ist da, ich muss drann und mir steht in dem Falle nur JS zur Verfügung.

    Klingt nicht unbedingt nach einem geeigneten Konzept …

    Einen schönen Mittwoch noch.

    Gruß, Mathias

    --
    ie:% fl:| br:< va:) ls:& fo:) rl:( n4:~ ss:) de:] js:| mo:| zu:)
    debian/rules
    1. Hi rob und Mathias

      PS: Bitte nicht nach Sinn oder Unsinn fragen. Der Blob ist da, ich muss drann und mir steht in dem Falle nur JS zur Verfügung.

      Klingt nicht unbedingt nach einem geeigneten Konzept …

      Womit du voll und ganz recht hast! Die Aktion mit dem Blob führt das ganze Konzept und alle Vorteile einer Datenbank ad absurdum! Nur hab ich mir den Mist nicht ausgedacht, muss aber nun damit leben:-(

      Vielleicht doch eine kleine Erklärung:
      Hier läuft nix in nem Browser, Dateien gibts nicht und PHP habe ich nur lokal am Arbeitsplatz zum schnell mal probieren genutzt. Das steht garnicht zur Verfügung.
      Das ganze soll innerhalb von Kettle laufen. Das ist ein OS ETL Tool und man kann für Transformationen JS benutzen.

      Aber nach euren Hinweisen kann ich das wohl abhaken. JSON sieht zwar gut aus. Könnte wirklich gehen, aber dafür müsste ich den Krembel erst entzipen.

      Ob Kettle AJAX unterstützt??? Selbst wenn. Hier gehts um ne Datenbank mit mio. von Einträgen. Da kann ich nicht für jeden Eintrag nen Server kontaktieren. Das würde vermutlich ewig dauern. Außerdem findet sich bestimmt ein Admin der mir liebend gerne den Kopf abreißt wenn ich irgendeinen Server kapere und den den lieben langen Tag mit solchen Anfragen bombadiere;-)

      Jetzt bleibt mir wohl nur die Variante ein komplett eigenes Plugin in richtigem Java zu schreiben. Aber das ist recht aufwändig und so der Java Crack bin ich auch nicht. Aber wenigstens weiß ich das man da Daten enpacken kann;-) Und euer Hinweiß auf JSON könnte mir da helfen. Denn ein schneller Blick auf die unserialisierten Daten sieht ähnlich aus!

      THX
      Mark

      Hallo mark.

      Ich müsste selbiges mit Java Script hinbekommen. Geht das überhaupt? Kann JS entzippen und ggf. ein PHP Array deserialisieren?

      Für letzteres könntest du dir selbst eine Funktion schreiben, wenn die Quell- und Zielstruktur mehr oder weniger eindeutig festgelegt ist. Doch das Dekomprimieren wirst du so ohne weiteres nicht umgesetzt bekommen. Ich kann mir gerade auch nicht vorstellen, das JS überhaupt mit Binärdaten umgehen kann.

      Einzige Möglichkeit, die mir hierzu noch einfällt: kontaktiere per XMLHttpRequest dein PHP-Script und lasse dieses die Arbeit übernehmen. Den dekomprimierten und ggf. auch schon deserialisierten Array kannst du dann an JS übergeben und dort verarbeiten. (Für letzteres bietet sich oft JSON an. PHP bietet seit Version 5.2.0 dafür direkt eine Schnittstelle.)

      Einen schönen Mittwoch noch.

      Gruß, Mathias

  2. Hi!

    Geht das überhaupt? Kann JS entzippen

    Nein. Eigentlich hast du mit JavaScript auch keinen Zugriff auf das Dateisystem.
    Mit ein wenig tricksen wäre es zwar möglich, eine Datei einzulesen.
    Aber du kannst mit JavaScript keine Datei entpacken und die entpackte Datei wieder auf der Festplatte speichern.

    und ggf. ein PHP Array deserialisieren?

    Ja, das wäre möglich.
    Du kannst ja JS-Code mit PHP schreiben. Also kannst du auch einfach einer JS-Variablen dein serialisiertes Array zuweisen.
    Da sich in diesem String aber vermutlich Quotes befinden, müßtest du diese escapen.
    Folgendermaßen würdest du ansonsten eine Fehlermeldung erhalten:
    echo "var blabla = " . $serialisiertesArray . ";";

    Naja und wenn du dann eine JS-Variable hast, die dein Array in serialisierter Form enthält, dann könntest du daraus wieder ein JS-Objekt, Array, ... basteln. Das mußt du manuell machen, weil JS selbst keine Funktion dafür bietet.
    Es gibt dafür auch fertige Scripte, die dir die Arbeit abnehmen, z.B. hier.

    Vielleicht solltest du dir auch überlegen, ob es nicht sinnvoller wäre, mit JSON zu arbeiten.

    Schöner Gruß,
    rob