file_put_contents wird nicht ausgeführt durch einen AJAX Aufruf

tklustig

Erfahrenes Mitglied
Hallo Leute,
mithilfe von AJAX-Anfragen wird Vue.js mit PHP verbunden und eine Json von PHP zurück geliefert. Da diese Json fehlerhaft ist, versuche ich, mittels file_put_contents den var_dump() in eine Textdatei zu schreiben:
ob_start(); var_dump($jsonReturnFile); file_put_contents('errorPlugin.log',PHP_EOL . ob_get_contents(), FILE_APPEND); ob_end_clean();
Unerwarteterweise wird die Datei aber weder erzeugt noch geschrieben. Ich habe probeweise sudo chmod 777 -R folder abgesetzt, aber die Datei wird nicht erzeugt. Auch ein find -name errorPlugin.log bleibt ergebnislos. Weiß jemand, warum bzw. wie ich diese Datei erzeugen kann?Die Logfile zeigt keinen Fehler bzgl. des obigen Codes....
 
Zuletzt bearbeitet:
Lösung
Probiere mal

PHP:
<?php
ob_start();
$jsonReturnFile = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
var_dump($jsonReturnFile);
if (file_put_contents(__DIR__ . '/errorPlugin.log',PHP_EOL . ob_get_contents(), FILE_APPEND) === false)
{
    echo "file_put_contents fehlgeschlagen";
    
    $temp_file = tempnam(sys_get_temp_dir(), 'Error');
    
    file_put_contents($temp_file, ob_get_contents(), FILE_APPEND);
}
ob_end_clean();
?>
und kontrolliere, ob im tmp-Verzeichnis eine Datei angelegt wurde.
Probiere mal

PHP:
<?php
ob_start();
$jsonReturnFile = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
var_dump($jsonReturnFile);
if (file_put_contents(__DIR__ . '/errorPlugin.log',PHP_EOL . ob_get_contents(), FILE_APPEND) === false)
{
    echo "file_put_contents fehlgeschlagen";
    
    $temp_file = tempnam(sys_get_temp_dir(), 'Error');
    
    file_put_contents($temp_file, ob_get_contents(), FILE_APPEND);
}
ob_end_clean();
?>
und kontrolliere, ob im tmp-Verzeichnis eine Datei angelegt wurde.
 
Lösung
Unabhängig von den Problemen beim Schreiben der Datei: Kannst Du nicht das JSON, das vom Server kommt, im Netzwerk-Tab der Entwicklerwerkzeuge einsehen? Dann müsstest Du den Fehler auch finden können. Häufig ist es auch möglich, zu Testzwecken die PHP direkt, ohne Ajax, im Browser aufzurufen, um die Serverantwort zu Gesicht zu bekommen.
 
Folgender Code schreibt nix in eine Datei. Das JSON ist einsehbar, aber der Error wird von PHP erzeugt, und deshalb möchte ich ihn genauer spezifizieren. Da der Error in Shopware6 auftritt. kann ich ihn auch nicht ohne Ajax reproduzieren.
//changed code - BEGIN //changed code - BEGIN try{ $productId=$this>productRepository>search($productCriteria,$context)>first()>getUniqueIdentifier(); // varientProduct is null. so saleschannelId can't be found $varientProduct = $this->productRepository->search($productCriteria, $context)->first()->getSeoUrls(); $saleschannelId = $varientProduct->first()->getSalesChannelId(); }catch(\Exception $er){ file_put_contents(__DIR__ . '/errorPlugin.log',$er->getMessage().' in file:'.$er->getFile().' at line '.$er->getLine() . PHP_EOL, FILE_APPEND); } if(is_null($varientProduct)) file_put_contents(__DIR__ . '/errorPlugin.log','SEO Url of varientProduct with Id:'.$productId.' not found in database' . PHP_EOL, FILE_APPEND); else if(is_null($saleschannelId)) file_put_contents(__DIR__ . '/errorPlugin.log','Found variant Product SEOUrl:'.$varientProduct.' and variantID:'.$productId.', but SalesCahnnelId not found in database for varientProduct' . PHP_EOL, FILE_APPEND); ob_start(); var_dump($productId); var_dump($varientProduct); var_dump($saleschannelId); if (file_put_contents(__DIR__ . '/errorPlugin.log',PHP_EOL . ob_get_contents(), FILE_APPEND) === false){ echo "file_put_contents fehlgeschlagen"; $temp_file = tempnam(sys_get_temp_dir(), 'Error'); file_put_contents($temp_file, ob_get_contents(), FILE_APPEND); } ob_end_clean(); //changed code - END
Es wird zu keinem Zeitpunkt eine Date erstellt. Schreibrechte liegen in vollem Umfang vor. Ein
find / -name errorPlugin.log
auf {root_dir} Ebene bleibt ohne Treffer! Die normale Log liefert folgendes:
Uncaught PHP Exception Error: "Call to a member function getSalesChannelId() on null" at

Ich verstehe einfach nicht, warum
a)Eine unbehandelte Exception geworfen wird, da ich die kritische stelle in ein try/catch gepackt habe
b)sämtliche file_put_contents Befehle ohne jegliches Feedback bleiben. Nix,null,nada, als ob es den Code gar nicht gäbe. Habe Nginx natürlich neu gestartet....
 
Hat sich erledigt, zumindest das Schreibproblem. Die var_dump() werden allerdings nicht in das Verzeichnis /tmp geschrieben, sondern in das Verzeichnis, indem die aufgerufene PHP File liegt!Vielen Dank an

bdt600

 
Zurück