unserialize() durch leerzeichen nicht möglich

  • Zwar habe ich meine Seite nicht angepasst, doch neuerdings funktioniert eine externe Abfrage nicht mehr korrekt, die ein serialisierte array übergibt. Ich habe nun ein wenig rumprobiert und bin auf folgendes Ergebnis gestoßen:


    Das serialisierte array beinhaltet neuerdings ein Leerzeichen am Anfang, wodurch die funktion unserialize() nicht mehr funktioniert. Zwar lässt sich das Problem mit einem kleinen trim() lösen, jedoch habe ich keinen Zugriff auf die externen Abfragescripte, welche bei meinen Kunden liegen. Ein trim() auf meiner Seite direkt nach dem serialize() bringt leider nichts.


    Ich hoffe man konnte verstehen, was genau ich meine. Meine Frage ist nun, hat das Problem schon einmal jemand gehabt bzw. wie kann es plötzlich auftreten, wenn es doch vorher problemlos funktionierte? Gab es ein Update der PHP version auf den Servern oder ähnliches? Seit neustem wurden mir auch SESSION Fehler ausgegeben, die ebenfalls vorher nicht vorhanden waren, ohne das was an der Seite geändert wurde. Bin da leider etwas überfragt.

  • maXus;3876 wrote:

    Das serialisierte array beinhaltet neuerdings ein Leerzeichen am Anfang, wodurch die funktion unserialize() nicht mehr funktioniert. Zwar lässt sich das Problem mit einem kleinen trim() lösen, jedoch habe ich keinen Zugriff auf die externen Abfragescripte, welche bei meinen Kunden liegen. Ein trim() auf meiner Seite direkt nach dem serialize() bringt leider nichts.


    Wenn das Leerzeichen bei dir noch nicht existiert (lese ich jdenfalls so aus deinem Beitrag heraus), dann stimmt etwas nicht mit der Übergabe an das andere Script. Wie übergibst du die Daten denn? Per GET, POST, FILE oder ganz anders?



    MfG Christian

  • Über fopen und fread wird eine Datei abgerufen (check.php), die dann die Ausgabe via echo ausgibt. Wie gesagt, bis vor kurzem hat alles noch reibungslos funktioniert. Hab das Portal leider so übernommen, denn ich hätte da einen anderen Lösungsansatz genommen. Nun bleibt mir also nur die Lösung auf meiner Seite zu suchen und es dann in neueren versionen mit einem neuen Lösungsansatz auszubessern. Frage mich halt, woher das Leerzeichen kommt, da es auf meiner Seite noch nicht vorhanden war/ist.

  • Das Leerzeichen könnte ich dem Fall genausogut ein echtes Leerzeichen im Nicht-PHP-Teil deines Scriptes sein, das so 1:1 ausgegeben wird. Baue doch zum Test vor die Ausgabe mit echo einmal eine Header-Ausgabe ein, wenn du einen Fehler bekommst, siehst du wo du suchen musst, wenn nicht, liegt der Fehler woanders...


    Code
    1. header('Content-Type: text/plain');



    MfG Christian

  • Wenn die Ausgabe wirklich nur sowas wie "echo serialize(...);" ist, würde ich auch vermuten, dass das Leerzeichen außerhalb vom PHP-Code ist. Lass mal den schließenden Tag weg (?>), dann kannst du zumindest nichts am Ende der Datei haben. Wenn die Datei direkt mit <?php beginnt, und trotzdem ein Leerzeichen erscheint (dann müsste die header-Anweisung wie vorgeschlagen meckern, dass schon etwas ausgegeben wurde), dann kann es daran liegen, dass die Datei in UTF8 abgespeichert ist. Um das explizit anzugeben, fügen Editoren 2-3 Bytes am Anfang der Datei ein, die nicht angezeigt werden. Trotzdem sind sie da und können den Programmierer ganz schön zur Verzweiflung bringen. ;) Lösen lässt sich das, indem man die Datei als "UTF8 ohne BOM" (Byte Order Mark) speichert. Ich benutze Notepad++, aber das dürfte es auch in anderen Editoren geben.