Synology: PHP 7 CLI fehlerfrei (Nextcloud und PHP 7)

Das PHP-Paket ist zwar schnell auf einer Synology DiskStation installiert, die richtige Konfiguration kann aber etwas komplexer ausfallen. Leider verhält sich PHP auf einer DiskStation etwas anders als auf einem gewöhnlichen Unix/Linux-Server. Gerade das PHP CLI verhält sich nicht immer wie erwartet. Manche Anwendungen lassen sich in der Konsole mit PHP 7 nicht ausführen. In diesem Artikel erkläre ich, wie man diesen Fehler behebt und so z.B. die Nextcloud-Konsolenkommandos occ mit PHP 7 ausführen kann.

PHP hat zwei Seiten, eine davon wird von Webserver (z.B. Apache) genutzt. Die andere Seite ist das CLI (Command Line Interface). Damit lassen sich PHP-Befehle und Scripte auf der Shell ausführen (z.B. über putty). Um PHP auf der Konsole auszuführen wird der Befehl php genutzt. Sind mehrere Versionen installiert, gibt es für jede Version einen eigenen Befehl (z.B. php56, php70). In der CLI-Version vom PHP-7.0-Paket sind nicht alle Extensions verfügbar (warum weiß wohl nur Synology selbst). Aus diesem Grund kommt es z.B. bei der Ausführung von sudo -u http php70 occ … zu einer Fehlermeldung. Da Nextcloud 13 angeblich der letzte Mayor-Release ist, der PHP 5.6 unterstützt, könnte das schon sehr bald wichtig werden.

Um PHP 7.0 richtig verwenden zu können, muss das richtige Profil angegeben werden.

  1. Zuerst brauchen wir den Namen vom richtigen Profil. Diese werden unter /var/packages/WebStation/etc/php_profile/ in einem Ordner pro Profil abgelegt. Der Name ist nicht sprechend, ihr müsst also auf eurer DiskStation selbst danach suchen. Solltet ihr mehrere Ordner (2, wenn ihr PHP 5.6 und PHP 7.0 installiert habt/hattet) vorfinden, und nicht wissen, welche zu PHP 7 gehört müsst ihr euch den Inhalt etwas genauer ansehen. In jedem Ordner findet sich ein conf.d-Ordner und darin ist das Profil gespeichert. Geht zuerst sicher, dass das PHP 7-Profil einen Unterschied aufweist:
    1. Öffnet im DSM die WebStation und seht euch unter den PHP-Einstellungen die Profile an, sucht nach einem Unterschied (z.B. Extensions die in einem Profil aktiviert sind, im anderen nicht).
    2. Wenn ihr keine findet, aktiviert/deaktiviert eine Extension in einem der Profile.
    3. Öffnet jetzt die Profile (in /var/packages/WebStation/etc/php_profile/<Buchstabensalat>/conf.d/) mit vi oder nano und seht euch die aufgelisteten Extensions an. Dort findet ihr den Unterschied wieder und könnt somit die Profile zuordnen.
    4. Merkt euch den Namen für das PHP 7.0 Profil.
  2. Erstellt ein Script mit folgendem Inhalt:

    Statt <Buchstabensalat> setzt ihr den Namen eures PHP 7.0 Profils ein, den ihr oben ermittelt habt.
  3. Testet das Script in dem ihr in putty folgenden Befehl ausführt:

    Diser Befehl ist nichts anderes als php(70) -i also das phpinfo()-Äquivalent über die CommandLine. Wenn ihr alles richtig gemacht habt, wird euch die PHP 7.0-Konfiguration laut eurem Profil ausgegeben. Relativ zu Beginn der Ausgabe sollte auch die PHP-Version (in unserem Fall 7.0) aufgelistet sein.
  4.  Jetzt könnt ihr die OCC-Commands mit PHP 7.0 nutzen. Anstatt

    nutzt ihr die modifizierte PHP 7.0 CLI, indem ihr php56 einfach ersetzt:
  5. Jetzt könnt ihr den Nextcloud-Cron auch mit PHP 7.0 laufen lassen. Geht dazu im DSM in den Aufgabenplaner und erstellt eine neue Aufgabe, als Typ nehm eigenes Script und lasst die Aufgabe alle 15 Minuten ausführen. Als Befehl gebt ihr folgendes ein:
  6. Da es etwas umständlich ist, immer den ganzen Pfad zum Script anzugeben und man den Pfad auch schnell mal vergisst, wenn man nach ein paar Wochen oder Monaten wieder einmal ein Nextcloud-Update macht, kann man sich das Leben ein wenig einfacher machen. Und zwar mit einem Alias. Man kann für die CommandLine einen Alias festlegen, also eine Art Abkürzung, dahinter kann sich ein langer Pfad verstecken aber auch ein komplexer Befehl inklusive verketteter Commands und Parametern. Wir wollen aber nur einen kurzen Alias für den Pfad und den Scriptnamen.
    Alias werden in der .bashrc_profile (zu finden in /etc.defaults/) angelegt. Öffnet die Datei mit einem Editor eures Vertrauens (via putty). Bei mir waren schon 2 Alias-Einträge vorhanden, ich habe den neuen einfach darunter hinzugefügt, ansonsten sollte es egal sein, wo der Eintrag eingefügt wird. Die Syntax sieht folgendermaßen aus:

    Jetzt müsst ihr Putty neu starten/die Verbindung neu aufbauen und dannach könnt ihr mit php7cli -i testen ob der Alias funktioniert. Ihr könnt ihn jetzt für die Aufrufe von occ-Commands nutzen oder auch in den obigen Aufruf der Nextcloud-Crons.Leider sind Anpassungen in der bashrc_profile genauso persistent wie z.B. die Anpassung des Timeouts von nginx und Apache, nachdem ihr ein DSM-Update installiert habe sind sie weg. Das heißt, ihr müsst sie dann weider neu eintragen.

 

Warum Synology im PHP-7.0-Paket nicht alle Extensions für die CLI-Version unterstützt, kann ich nicht sagen. Aber mit etwas Nachbessern bekommt man auch das geregelt. Vielen Dank an Lux007 aus dem Synology-Forum für die Lösung.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.