PHP PHP Fehlermeldung "Unexpected '<'" bei POST Aufruf

Cynik926

Ensign
Registriert
März 2014
Beiträge
151
Hallo zusammen,

ich arbeite an einem PHP Backend und dieses File soll für einen POST aufruf benutzt werden. Übertragen wird dabei json. Dieses File soll den Aufruf entgegen nehmen und entsprechend weiter verarbeiten. Ich erhalte jedoch beim Aufruf mit Postman die obige Fehlermeldung. Der Fehler deutet mmn. darauf hin, dass der PHP Code nicht valide ist, ich kann jedoch keinen Fehler identifizieren.
Hier der Code:

PHP:
<?php

        // required headers
        //
        header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}");
        header('Access-Control-Allow-Headers: Origin, Content-Type');
        header("Content-Type: application/json; charset=UTF-8");
        
        include_once './post.php';
        include_once './database.php';
    
    
        // instantiate database and product object
        $database = new Database();
        $db = $database->getConnection();
    
        // initialize object
        $post = new post($db);
    
        //Path Params
        $data = json_decode(file_get_contents("php://input"));
        
        $post->map($data);
    
        $newId = $post->createPost();
        
        echo json_encode($newId);
      
    

?>


Ich habe den Code Zeile für Zeile neu eingefügt, der besagte Fehler tritt nur auf wenn die 3. Header Zeile eingefügt ist. Lösche ich die Zeile, kompiliert der Code.
Exakt die gleichen header Zeilen verwende ich in einem anderen File (wird für GET Request genutzt), dort funktioniert alles ohne Probleme.

Hat jemand eine Idee das entweder zu umgehen, oder was ich falsch mache?

Danke :)
Gruß
 
Und abgesehen von "Unexpected '<'" gibt es keine Zeilennummer oder Dateiangabe?
Kommt der Text als Rückmeldung vom POST oder steht der in einer log-Datei?
 
Cynik926 schrieb:
Hat jemand eine Idee das entweder zu umgehen, oder was ich falsch mache?

Hast du dir mal den HTTP-Response-Body angeschaut? Ich denke eher, dass sich dort am Anfang anstatt der öffnenden geschweiften Klammern des JSON ein HTML-Element befindet (z.B. <html>, <head>, etc.), was die Response invalid macht, da es gegen Content-Type: application/json verstößt. Deshalb tritt der Fehler auch nicht auf, wenn du die dritte Header-Zeile, die den Content-Type definiert, rausnimmst.
Ergänzung ()

Darlis schrieb:
Und abgesehen von "Unexpected '<'" gibt es keine Zeilennummer oder Dateiangabe?
Kommt der Text als Rückmeldung vom POST oder steht der in einer log-Datei?

Postman ist ein Programm, mit dem man HTTP-Requests manuell schreiben kann.
Wenn der Response-Body Text enthält, dann kann er nach typischen Formaten (HTML, XML, Text, JSON) interpretiert werden. Wenn ich ein HTML-Dokument mit JSON interpretiere kommt exakt diese Fehlermeldung (in der Regel würde das Javascript im Frontend dann in der JS-Konsole des Browser diesen Fehler werfen):

Unbenannt.PNG
 
Zuletzt bearbeitet:
Ist aber eher ein "Request" statt ein "Response"-Body, oder? ;-) Denke aber auch dass hier XML/HTML geliefert wird statt JSON.
 
@DaZpoon die Frage ist ungenau bzw. falsch gestellt.

Wenn PHP selbst den Fehler wirft, dann liegt es am json_decode(). Das würde aber heißen, dass die Response eine Fehlermeldung von PHP im Stile von Warning: unexpected "<" und kein HTML enthielte und in der Warning-/Error-Angabee die Zeile 21 vom fehlschlagenden json_decode() enthalten würde.

Da aber erstens json_decode() keine PHP-Fehler wirft, wenn das JSON nicht wohlgeformt ist:

Unbenannt.PNG


und zweitens das Ganze auch nicht das Verhalten beim Entfernen von Zeile 7 mit header("Content-Type: application/json; charset=UTF-8"); erklärt, kann es m.E. nur um den Response-Body gehen, der wohl XML/HTML enthält, aber vom Client als JSON geparst wird. (Siehe mein Screenshot mit genau diesem Szenario in Postman in Kommentar #3).

Ein Browser mit JS-Engine würde übrigens "SyntaxError: Unexpected Token < in JSON at position ..." beim Parsen angeben:

Unbenannt.PNG


Deshalb gehe ich wirklich zu 99% davon aus, dass es der obige Postman-App-Fehler beim Parsen des JSON ist. Was heißt dass es um die Response gehen muss.

@Cynik926 überprüfe bitte den Response-Body in Postman mit der Einstellung "Raw", dann siehst du ob da noch irgendwelcher anderer Blödsinn neben dem JSON übertragen wird.
 
Zuletzt bearbeitet:
@psYcho-edgE : Klingt plausibel. Hier ist halt wirklich nicht ausreichend genannt wo der Fehler tatsächlich produziert wird. Wahrscheinlich beim Empfänger des Response und garnicht im PHP Skript selbst.
 
  • Gefällt mir
Reaktionen: psYcho-edgE
Zurück
Oben