Auto-hébergement, Logiciel, Synology

Résoudre l’erreur PHP 7 depuis la console sur Synology pour pouvoir mettre à jour Nextcloud

PHP 7 obligatoire depuis Nextcloud 14

Si vous avez tenté la mise à jour de Nextcloud sur Synology depuis la console, vous avez certainement dû vous heurter à une erreur lorsque vous avez eu besoin d’exécuter PHP.

En effet, Synology n’a pas facilité la vie de ses utilisateurs : le constructeur a remplacé la fonction bash « php » par « php56 » (allez comprendre pourquoi).

En toute logique, il faudrait donc utiliser « php70 » pour exécuter une commande avec php 7… ou pas ! Si vous tentez d’exécuter sudo -u http php70…, vous obtenez un message d’erreur. Or, impossible de mettre à jour votre Nextcloud via php 5.6 !

Nous allons donc mettre en place un script à appeler à chaque fois que nous souhaitons exécuter une commande en php 7, afin de contourner l’erreur.

Prérequis

Partons du principe que vous avez installé les paquets PHP 5.6 et PHP 7, et par conséquent un profil php 5.6 et un profil php 7.

Pour commencer, il va nous falloir repérer le profil de php 7 que nous allons utiliser : connectez-vous en SSH à votre serveur, et rendez-vous dans /var/packages/WebStation/etc/php_profile

Vous devriez avoir 2 dossiers aux noms à rallonge (a7557633-8e25-4a6a-83cd-7dc6fb38e753 par exemple). En regardant dans ces dossiers, éditez le fichier fpm.conf.

La ligne syslog.ident = php70-fpm vous indique que vous êtes sur le bon profil (par opposé à syslog.ident = php56-fpm). Notez la chaîne de caractères correspondant au nom du profil , puis passons à la création du script :

Création du script

#!/bin/bash
PHP_INI_SCAN_DIR=.:/usr/local/etc/php70/:/var/packages/WebStation/etc/php_profile/le-nom-du-profil/conf.d/
export PHP_INI_SCAN_DIR
php70 $*

Remplacez le-nom-du-profil par… la chaîne de caractère que vous avez noté précédemment, puis enregistrez le fichier, script_php70.sh par exemple, puis déposez le fichier sur votre serveur.

Vous pouvez aussi tout faire via la console :

echo -e '#!/bin/bash\n PHP_INI_SCAN_DIR=.:/usr/local/etc/php70/:/var/packages/WebStation/etc/php_profile/le-nom-du-profil/conf.d/\n export PHP_INI_SCAN_DIR\n php70 $*' > /volume1/web/scripts/script_70.sh

Désormais, vous pouvez remplacer dans toutes vos commandes php par ./script_70.sh.

Par exemple, pour mettre à jour Nextcloud  :

sudo -u http ./script_70.sh occ upgrade

Créer un alias

Astuce : pour éviter de retrouver le chemin du script à chaque fois que vous en avez besoin, créons un alias :

Dans le fichier /etc.defaults/.bashrc_profile, ajoutons la ligne :

alias php-7='/chemin/vers/le/script/script_php70.sh'

Ici, j’ai choisi php-7 comme alias. En relançant la connexion SSH à votre serveur, vous pouvez désormais utiliser php-7 (ou tout autre alias de votre choix) pour exécuter vos commandes php7.

Nous avons enfin toutes les billes pour entamer sereinement la mise à jour de Nextcloud : je vous détaille tout ça dans un prochain article ! 🙂

Merci à Andreas de Viking Studios pour la solution !


2 Réponses à Résoudre l’erreur PHP 7 depuis la console sur Synology pour pouvoir mettre à jour Nextcloud

  1. Bonjour,

    Cette Procédure est-elle toujours d’actualité ?

    sudo: ./script_70.sh: command not found

    Avec ou sans l’utilisation de l’alias, même erreur.
    sudo: php-7: command not found

    Je désespère de trouver une solution pour enfin mettre à jour nextcloud. 🙂

    1. Hello Maxime !
      Le sudo php-7 ne peut fonctionner qu’avec l’alias, sinon il faut que tu entres le path entier lorsque tu veux faire la mise à jour !
      Par exemple pour ma part : /volume1/web/scripts/script-php7.sh
      Dis moi si ça a fonctionné !

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *