Contao: PHP-Version in Environment für Contao-Console

(Kommentare: 0)

Problem: Alte PHP-Version im Environment

Ich habe zwar für meine Contao-Website PHP 8 eingestellt (Contao 4.13) und auf der Kommandozeile rufe ich den Composer mit der richtigen PHP-8-Version direkt auf. Wenn ich aber auf der Console die Contao-Console (vendor/bin/contao-console) aufrufe, dann nutzt die contao-console die PHP-Version, die im Environment verdrahtet ist. Das ist in meinem aktuellen Fall bei all-inkl leider noch eine Version 7, was die Console nicht verträgt. Es gibt die Fehlermeldung:

Composer detected issues in your platform:
Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.2.34-nmm8.
PHP Fatal error:  Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.2.34-nmm8. in /xxxxxxx/vendor/composer/platform_check.php on line 24


Denn: Im Console-Skript steht in der ersten Zeile:

#!/usr/bin/env php

Bei den aktuellen Einstellungen in meinem Hosting findet dieses Kommando /usr/bin/php, was ein Link ist zu /usr/bin/php74. Ich muss dem Environment also unterjubeln, dass es bitte PHP 8 zuerst finden soll.

Den Link /usr/bin/php kann ich nicht ändern und ein alias (alias php=/usr/bin/php8.1) setzen reicht nicht aus für "#!/usr/bin/env php".

 

Plan: PATH anpassen

Ich müsste also die PATH-Variable des Environments anders setzen. Dort kann ich aber nur Verzeichnisse aufzählen und nicht direkt sagen, dass php jetzt was anderes bedeueten soll. Also sorge ich dafür, dass in PATH zuerst ein Verzeichnis steht, das ich in der Hand habe und lege dort eine Datei namens php rein, die (a) ein Shell-Skript ist und den Aufruf mit all seinen Parametern an das richtige PHP weiter leitet oder (b) die einen Link zur richtigen PHP-Version darstellt.



Am Beispiel bei all-inkl

Angenommener User w01010101.



(a) Datei php erstellen

#!/bin/sh
/usr/bin/php81 $*

Nebenbei: Bei Ionos wäre es /usr/bin/php8.1-cli

 

Datei php per FTP hochladen in Verzeichnis /www/htdocs/w01010101/, danach ausführbar (executable) machen (per SSH: chmod 744 php).

 

(b) php als Link

Via SSH-Console einen Link zur richtigen PHP-Version erstellen. ABER: Seltsamerweise hat das gerade bei mir nicht zum Ziel geführt. Habe den Link auf php 8.2 gesetzt, /www/htdocs/w01010101/php --version zeigt mir 8.2, aber php --version zeigt mir seltsamerweise eine andere Version... :( Naja, mit der Datei oben funktioniert es einwandfrei.

SSH> cd /www/htdocs/w01010101
SSH> ln -s /usr/bin/php81 php

 

SSH-Konsole

Nach Login via SSH setze ich den Pfad manuell:

SSH> PATH=/www/htdocs/w01010101:$PATH


Jetzt kann ich die Contao-Console aufrufen (TL_ROOT soll das  Contao-Root-Verzeichnis sein):

SSH> cd TL_ROOT
SSH> vendor/bin/contao-console

 

Ausbaustufen

Pfad in .bashrc setzen

Damit ich das nicht ständig manuell machen muss, setze ich diesen Pfad in .bashrc, also der Datei, die bei SSH-Login immer aushgeführt wird und mein Profil bzw. Environment bestimmt. (Bei all-inkl läuft die bash, das kriege ich raus mit
echo $SHELL oder env.)
Ich wechsele in mein Home-Verzeichnis und editiere die Datei .bashrc mit vim. (Bei anderen Shells wäre es eine andere Datei...)

SSH> cd ~
SSH> vim .bashrc 


Der vim ist gewöhnungsbedürftig, aber man kriegt es hin, das wichtigste unten. Ich kopiere mit die Zeile mit dem Pfad

export PATH="/www/htdocs/w01010101/:$PATH"


in die Zwischenablage. Im vim navigiere ich mit den Pfeiltasten nach unten ans Ende der Datei. Dort dann dann:

i        "insert", so dass ich an Ort und Stelle was einfügen kann, 
was ich mit Ctrl+V tue (die o.g. Ziele aus der Zwischanablage einfügen).
ESC Mit der Escape-Taste verlasse ich den Eingabemodus
und gehe zurück zu Befehlsmodus
:w "write" alias Speichern
:q "quit", puh, geschafft



Pfad in PHP setzen

Ich nutze gerne ein PHP-Skript (Webseite), in dem ich die benötigten Composer-Befehle oder Console-Aufrufe via exec mache (sofern der Provider das zulässt...), um das im Browser machen zu können und um das Geraffel mit der Kommandozeile zu sparen. (Diese "Webseite" sollte natürlich geeignet via htaccess Passwort-geschützt sein... Aber auch das ist meist schneller als Kommandozeile oder Contao-Manager). Um im PHP-Web-Skript dann auch die contao-console ausführen zu können, muss ich dem Environment der PHP-Seite noch den richtigen Pfad setzen:

$phpdir = '/www/htdocs/w01010101'; // Hier liegt meine php-Datei
$path = getenv('PATH');
putenv('PATH='.$phpdir.':'.$path);


Dann kann ich mit mit exec arbeiten, z.B. so:

$root = "/pfad/zu/meinem/contao/root";
$params = "--raw"; // Nur ein Beispiel für Parameter
$command = "${root}/vendor/bin/contao-console ${params}";
$r = exec($command, $out, $rs);
echo "<pre>\n";
var_dump($r);
var_dump($rs);
if (is_array($out)) echo implode("\n", $out);
else var_dump($out);
echo "\n</pre>\n";

 

 

Zurück

Kommentare

Einen Kommentar schreiben


Bitte geben Sie den Code ein, den Sie im Bild sehen.