Autor Zpráva
pajadvorak
Profil
Po přechodu z PHP 7.0 na PHP 7.4 máme problém s naší aplikací.

Tuto chybu nám to vrací:
{"message":"Unspecified internal error: - Trying to access array offset on value of type null - \u0159\u00e1dek 38 v souboru \/xxx\/xxx\/xxxxx.cz\/www\/xxxxxx.cz\/xxxxxx\/api.php"}


řádek 37 => $body = (json_decode(file_get_contents('php://input'), true));
řádek 38 => $response = $action->Perform((object)$parray, (object)$body["body"]["request"]);

Na google jsme nic moc nenašli. Prosím o pomoc. Děkuji.
lionel messi
Profil
pajadvorak:

Skúšali ste základný debugging? var_dump($body); json_last_error(); a podobne...
Keeehi
Profil
pajadvorak:
Hláška říká, že se snažíte přistupovat k něčemu co si myslíte že je pole ale ve skutečnosti je to null. Pravděpodobně to bude už proměnná $body. Do té se null dostane jako návratová hodnota funkce json_decode. Ta null vrací (mimo jiné), pokud se nepodaří rozparsovat vstup. Což bude pravděpodobně tento případ. Takže asi file_get_contents('php://input') nevrací úplně to co byste čekali. Pokud je tam však validní json pak nezbývá než hledat, ve které části se ten null bere. Pokud nemáte debugger, tak se bude určitě hodit var_dump, jak psal lionel messi.
pajadvorak
Profil
Tak to jsme již vyřešili.

if ($_SERVER['REQUEST_METHOD'] == 'POST')
    {
        $body = (json_decode(file_get_contents('php://input'), true));
        $body = (object)$body["body"]["request"];
    }
    else
    {
        $body = [];
    }    
    
    $response = $action->Perform((object)$parray, $body);
    
    header("Content-Type:application/json");
    http_response_code($response->code);

    json_encode($response->data);

Ale i přesto, že všude jsou data (code = 200, data = vrací potřebné pole) při vypsání na obrazovku (print_r()), tak to v těle hlavičky není - v odpovědi.

Co se tam mohlo změnit, že to v PHP 7.0 funguje a v PHP 7.4 ne? Máte někdo prosím radu, co s tím? Již se s tím trápím několik dní a bez úspěchu. Děkuji.
pajadvorak
Profil
lionel messi:
mám tam toto (bez chyby):

catch (UnknownActionException $e) 
{
    error_response(400, $e->GetMessage());    
}
catch (AuthException $e) 
{
    error_response(401, $e->GetMessage());    
}
catch (ApiException $e) 
{
    error_response(500, $e->GetMessage());    
}
catch (\ErrorException $e) 
{
    if (DEBUG)
    {
        error_response(500,"Unspecified internal error: - {$e->GetMessage()} - řádek {$e->GetLine()} v souboru {$e->GetFile()}"); 
    }
    else
    {
        error_response(500,"Unspecified internal error"); 
    }
}
catch (\Exception $e) 
{
    if (DEBUG)
    {
        error_response(500,"Unspecified internal error: - {$e->GetMessage()}"); 
    }
    else
    {
        error_response(500,"Unspecified internal error"); 
    }
}



vyřešeno

problém byl v chybjícím "echo"

json_encode($response->data);

Zvláštní, že to v PHP 7.0 nevadilo....

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0