Smart Albums der Photo Station 6 (Synology DSM 720+) laden nicht

Die smarten Alben der Photo Station 6 sind sehr praktisch. Anhand bestimmter Filter werden eine Auswahl an Videos und Bilder angezeigt. Leider existiert das Problem, dass die Smart Albums unter bestimmten Umständen nicht geladen werden. Man sieht lediglich den Ladebalken "Loading...".

Smart Albums der Photo Station laden nicht

Im Netz wird berichtet, dass der Fehler bei großen Datenmengen der Fall und man die Indexierung neu starten soll. Wenn eine Neu-Indizierung nicht hilft, kann ein Bug im PHP-Skript der Photo-Station 6 das Problem sein.

Ursachen-Forschung: Log-Datei des nginx-Webservers der Photo Station 6

Bei der Photo Station 6 handelt es sich um eine PHP-Applikation, die über einen nginx-Webserver ausgeliefert wird. Um die Fehlermeldung zu analysieren, starten wir ein Terminal und loggen uns via SSH ein. Voraussetzung ist, dass SSH auf dem Synology NAS aktiviert ist.

SSH auf dem Synology DS 720+ aktivieren

Anschließend stellen wir die SSH-Verbindung her, öffnen das Log des Webservers und öffnen die Smart Albums im Webbrowser. In unserem Fall trifft diese Fehlermeldung auf:

ssh my-admin-user@192.168.178.20
sudo -i
Password:

tail -f /var/log/nginx/error.log
2022/09/29 12:07:59 [error] 14317#14317: *6323 FastCGI sent in stderr: "PHP message: PHP Warning:  count(): Parameter must be an array or an object that implements Countable in /volume1/@appstore/PhotoStation/photo/include/photo/SmartAlbum.php on line 1023" while reading response header from upstream, client: 192.168.178.41, server: _, request: "POST /photo/webapi/smart_album.php?SynoToken=d6ea6b0bb72cd7b743f102ea976f6615 HTTP/1.1", upstream: "fastcgi://unix:/run/php-fpm/php74-fpm.PhotoStation.sock:", host: "192.168.178.20", referrer: "http://192.168.178.20/photo/"

Wir sehen also eine Warnung, dass im PHP-File SmartAlbum.php in Zeile 1023 ein Problem aufgetreten ist. Daher öffnen wir die Datei mit einem Editor. Auf dem Synology NAS ist der Editor VIM installiert, der sich für Anfänger etwas schwierig bedienen lässt. Daher hier noch mal die Tastenkombinationen explizit aufgeschrieben:

vi /volume1/@appstore/PhotoStation/photo/include/photo/SmartAlbum.php

# 1023 gefolgt von 2x Taste g gedrückt.
# Dadurch springt VIM zur Zeile 1023.
# Also richtig verstanden: 1 + 0 + 2 + 3 + g + g eingeben. 
Wir sollten nun folgende Codezeilen finden. Die Fehlermeldung erscheint, weil auf die Variable $photoIds die Methode count() angewendet wird. Wir passen die Stellen an, dass vorher geprüft wird, dass es sich um ein Array handelt:

Bug im PHP-Code der Photo Statiob finden und beheben

Wir entfernen nun die entsprechenden Zeilen, indem wir zwei die Taste d drücken. Anschließend drücken wir die Taste i, um den Editor in den Eingabemodus umzustellen.

Alter CODE

       if (0 < count($photoIds) || $photoRecentlyAddSqlCond || $photoRecentlyCommentSqlCond) {
            $query = "SELECT count(*) FROM photo_image as A";
            $cond = "WHERE ({$albumCondition['albumCond']})";

            if (false === $photoIds) {
                // empty condition, do nothing
            } else if (0 < count($photoIds)) {
                $cond .= " AND A.id IN (".implode(',', $photoIds).")";
            } else if (0 === count($photoIds)) {
                $cond .= " AND 1!=1 ";
            }
ERSETZEN MIT

        if ((is_array($photoIds) && 0 < count($photoIds)) || $photoRecentlyAddSqlCond || $photoRecentlyCommentSqlCond) {
            $query = "SELECT count(*) FROM photo_image as A";
            $cond = "WHERE ({$albumCondition['albumCond']})";

            if (false === $photoIds) {
                // empty condition, do nothing
            } else if (is_array($photoIds) && 0 < count($photoIds)) {
                $cond .= " AND A.id IN (".implode(',', $photoIds).")";
            } else if (is_array($photoIds) && 0 === count($photoIds)) {
                $cond .= " AND 1!=1 ";
            }
Anschließend drücken wir die Taste ESC und anschließend wq, um die Datei zu speichern.

Danach sollten die Smart Albums wieder normal funktionieren. Eigentlich nur eine kleine Änderung. Das schwierigste ist wahrscheinlich die Bedienung des Editors VIM.