TYPO3 PHP Pfad auf CLI
Fehlermeldung
Script typo3cms install:fixfolderstructure handling the typo3-cms-scripts event returned with error code 255
Script @typo3-cms-scripts was called via post-autoload-dump
Ursache
Das Script typo3cms
, welches von helhum/typo3-console
von Composer verwendet, erwartet, dass der Shell-Aufruf php
die richtige PHP-Version benutzt.
Jedoch trifft das nicht auf Systeme mit mehreren PHP-Versionen zu. Hier muss php7.4 bin/console
oder vergleichbares verwendet werden.
Lösung
Es werden composer scripts
verwendet, um ein Skript vor der typo3cms
console auszuführen und die PHP Version dynamisch zu überschreiben.
-
Legen Sie hierzu diese Datei im Projekt-Root ab und speichern Sie sie als
dynamicPhpPath.php
:<?php if (!getenv('PHP_BIN_PATH')){ return; } $typo3cmsPath = __DIR__ . '/vendor/bin/typo3cms'; if (!file_exists($typo3cmsPath)) { echo 'typo3cms binary not found at expected path ' . $typo3cmsPath . PHP_EOL; return; } $typo3cms = file($typo3cmsPath); $typo3cms[0] = '#!' . getenv('PHP_BIN_PATH'); file_put_contents($typo3cmsPath, implode(PHP_EOL, $typo3cms)); echo 'typo3cms PHP binary path patched' . PHP_EOL;
-
Passen Sie jetzt auch die
composer.json
-Datei an, sodass dieses Script vorher ausgeführt wird:"scripts":{ "typo3-cms-scripts": [ "typo3cms install:fixfolderstructure", "typo3cms install:generatepackagestates" ], "post-autoload-dump": [ "php dynamicPhpPath.php", "@typo3-cms-scripts" ] }
-
Nun können Sie bei einem Deployment oder auf der Console folgendes verwenden:
export PHP_BIN_PATH=/usr/bin/php7.4 ./vendor/bin/typo3cms
oder:
PHP_BIN_PATH=/usr/bin/php7.4 ./vendor/bin/typo3cms
-
Auch wenn Composer bei einem
install
-Befehl an passender Stelle dietypo3cms
-Befehle ausführt, ist das jetzt kein Problem mehr:export PHP_BIN_PATH=/usr/bin/php7.4 composer install
Bei Fragen steht Ihnen unser Support gerne zur Verfügung.