1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Attempt to read property "filename" on null

    • PHP
    • Problem
  • Syntafin
  • 12. März 2025 um 19:57
  • Unerledigt
  • Syntafin
    27
    Syntafin
    LISTstack Dev
    Reaktionen
    498
    Punkte
    7.768
    Trophäen
    2
    Beiträge
    1.411
    • 12. März 2025 um 19:57
    • #1

    Ja der Titel sagt alles :face_with_rolling_eyes:.

    Ein Problem das mich durch die Versionen hinweg begleitet, wird mir nun als "Occured 1000 Times" von meinem Error-Tracking gelabelt... Zeit mal vielleicht doch den Grund zu finden?

    Bei einigen Datenbank Einträgen bekomme ich beim Abruf eben jener eine Fehlermeldung um die Ohren geworfen, die eben genau dieser dort oben entspricht: Attem to read property "filename" on null.

    Nun gut, ich hab mir die besagten Einträge angeschaut und was soll ich sagen.... filename ist nicht null :thinking_face:, da steht genau wie es soll der Name der Datei drin!
    Das ganze passiert auch in einem Trait der dafür zuständig ist eine entsprechende URL zurückzugeben, um eben die gewünschte Datei auszugeben. Ich prüfe schon vorab in den jeweiligen Funktionen ob überhaupt Dateien verfügbar sind, sonst käme es ja nie so weit.

    Jetzt das kuriose! Frage ich es "manuell" ab, ist alles wie es sein soll, ja sogar im Stacktrace angehangenen JSON das die Routing Parameter zeigt sieht man die URLs die generiert werden.... samt dem beschuldigten!

    Kurzum aber mal, vielleicht zum besseren Verständnis, hier der besagte Stack-Trace:

    Flare

    Natürlich etwas gekürzt :winking_face: Nutzerdaten und so fehlen diesem.

    Die betadelte Funktion getImageUrlAttribute macht nichts anderes als aus dem einfachen Dateinamen eine gültige URL zu erzeugen, um eben die Datei auch anzuzeigen auf einfache Art und weiße (ich sag nur <img :src="image_url" />).


    Um nicht ganz blöd dazustehen, habe ich das ganze auch wie besagt schon manuell getestet mit folgendem Code:

    PHP
    use App\Models\Image;
    
    $image = Image::find(317);
    $image->load("files");
    
    $files = $image->files;
    
    echo "File Count: " . $files->count() . "\n" . "\n";
    foreach ($files as $file) {
      if (!is_null($file->filename)) {
        echo "Filename: " . $file->filename . "\n";
      }
    }
    Alles anzeigen

    Ergebnis:

    Code
    File Count: 5
    
    Filename: RjiXUVJvciYlYSJ46LZqUrO1fzzQGAHvyTbIVfuhHffZSTZ0amZd4rWZiHvdpJsJ
    Filename: 8zY4MyEbVHfhdjp1DE7JT2TAsZ8Jn2hdFbdrmu0sc4lTfIkHwwPlF5HugdA0msBt
    Filename: 5gkfI3vvofe5gdICNvSjAo27ioELuYLcyn9WiyDJbs5MzvuVFNdqt5ZqKws7jznk
    Filename: Mq6ZPB0YrrqoaxzOyasflVDS3RkE0wRV3YMGRIMOdtfmHVDe0a8dHm9VTnQ6qmZg
    Filename: Zku2g49M0sj4310D77pVFtQnjWDyklxbmZ8klgxwLw8Vgz41ymH3WQBcEuMktL6Q

    Also ich kann mich natürlich verzählt haben, aber da werden 5 Dateien gefunden und 5 auch aufgelistet.

    Ich bin hier echt mit meinem Wissen am Ende, aber vielleicht hat hier ja jemand noch eine Idee wo das Problem ist.
    Die besagte URL die einen Fehler wirft: https://syntafin.de/gallery/final-fantasy-xiv/317

    Das es durchaus geht, sollte natürlich auch bewiesen sein: https://syntafin.de/gallery/star-citizen/462


    Schon mal vorab vielen dank :grinning_face_with_smiling_eyes: und hoffe jemand hier weiß weiter!

    A red dragon falls from the heavens... Ah, that memory has been lost. A shame. It was a favorite of mine...

  • Cheety
    3
    Cheety
    Mitglied
    Reaktionen
    9
    Punkte
    84
    Beiträge
    14
    • 15. März 2025 um 01:50
    • #2

    Kannst du uns vielleicht einen dump von $files schicken?

    dd($files);

  • Cheety
    3
    Cheety
    Mitglied
    Reaktionen
    9
    Punkte
    84
    Beiträge
    14
    • 15. März 2025 um 02:08
    • #3

    Man sollte auch nicht direkt Attribute auslesen, ohne das Objekt selber abgefragt zu haben:


    Code
    if ($file && $file->filename) {
        echo "Filename: " . $file->filename . "\n";
      }


    Richtig wäre also normalerweise.

    Code
    public function getImageUrlAttribute(): string
    {
        \Log::debug($this->files);
    
        if ($this->files && $this->files()->exists()) {
            $file = $this->files()->first();
            if ($file && $file->filename) {
                return Storage::url('public/files/show/' . $file->filename . '.webp');
            }
        }
    
        return $this->defaultImage();
    }
    Alles anzeigen
  • Cheety
    3
    Cheety
    Mitglied
    Reaktionen
    9
    Punkte
    84
    Beiträge
    14
    • 15. März 2025 um 02:22
    • #4

    Ich denke auch, dass in deiner getImageUrlAttribute()

    $this->files und $this->files() unterschiedliche Ergebnisse zurückgeben können :grinning_squinting_face:

  • Syntafin
    27
    Syntafin
    LISTstack Dev
    Reaktionen
    498
    Punkte
    7.768
    Trophäen
    2
    Beiträge
    1.411
    • 15. März 2025 um 02:40
    • #5
    Zitat von Cheety

    Kannst du uns vielleicht einen dump von $files schicken?

    Gerne erneut wie im Startbeitrag:

    Code
    File Count: 5
    
    Filename: RjiXUVJvciYlYSJ46LZqUrO1fzzQGAHvyTbIVfuhHffZSTZ0amZd4rWZiHvdpJsJ
    Filename: 8zY4MyEbVHfhdjp1DE7JT2TAsZ8Jn2hdFbdrmu0sc4lTfIkHwwPlF5HugdA0msBt
    Filename: 5gkfI3vvofe5gdICNvSjAo27ioELuYLcyn9WiyDJbs5MzvuVFNdqt5ZqKws7jznk
    Filename: Mq6ZPB0YrrqoaxzOyasflVDS3RkE0wRV3YMGRIMOdtfmHVDe0a8dHm9VTnQ6qmZg
    Filename: Zku2g49M0sj4310D77pVFtQnjWDyklxbmZ8klgxwLw8Vgz41ymH3WQBcEuMktL6Q
    Zitat von Cheety

    Man sollte auch nicht direkt Attribute auslesen, ohne das Objekt selber abgefragt zu haben:

    Mache ich ja auch nicht, das da oben ist ein "Demo-Code" mit dem ich es manuell überprüft habe ob da wirklich nichts drin steht, was nicht mal möglich wäre.

    PHP
    public function getImageUrlAttribute(): string
    {
        return $this->files
            ? Storage::url('public/files/show/'.$this->files()->first()->filename.'.webp')
            : $this->defaultImage();
    }

    Wie schon bereits erwähnt, ist das ein Pseudo-Fehler der unmöglich ist bewusst zu reproduzieren, bei 1 Mrd. Versuche, gehen entweder alle 1 Mrd schief, oder es klappt 1x ihn zu provozieren.


    Update:

    Zitat von Cheety

    $this->files und $this->files() unterschiedliche Ergebnisse zurückgeben können :grinning_squinting_face:

    Ja, das war die Lösung.... Nachdem ich das gefunden habe, leuchtet es auch auf wieso.

    files() kann an der Stelle zu Problemen führen, wieso es aber fast immer funktioniert, und nur selten nicht, bleibt schleierhaft.

    Kleiner Tipp: man kann Beiträge bearbeiten, statt 3x hintereinander neuen Beitrag.

    A red dragon falls from the heavens... Ah, that memory has been lost. A shame. It was a favorite of mine...

    Einmal editiert, zuletzt von Syntafin (15. März 2025 um 07:11)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Ähnliche Themen

  • Angeblich leere Property, dabei ist sie vorhanden

    • Syntafin
    • 4. Januar 2025 um 11:38
    • Entwicklung

Tags

  • laravel
  • bug
  • eloquent
  • relationship

Benutzer online in diesem Thema

  • 1 Besucher

Rechtliches

Impressum

Datenschutzerklärung