update - Verwenden Sie für einen Befehl eine andere ausführbare CLI-Datei der PHP-Version




plesk change php cli version (4)

Also habe ich eine Gentoo-Box mit drei PHP-Versionen installiert (vergesse die Gründe):

  1. /usr/bin/php -> /usr/lib64/php5.4/bin/php
  2. /usr/bin/php5.5 -> /usr/lib64/php5.5/bin/php
  3. /usr/bin/php5.6 -> /usr/lib64/php5.4/bin/php

Ich möchte Laravel Framework mit Composer installieren:

$ composer create-project laravel/laravel --prefer-dist

Dies verursacht jedoch einen Fehler, da Laravel PHP> 5.5.9 und der Standard- php Interpreter 5.4 benötigt . Also gebe ich einen anderen Befehl aus:

$ /usr/bin/php5.6 /usr/bin/composer create-project laravel/laravel --prefer-dist

Das bringt mich einen Schritt weiter, aber dann kommen einige Post-Install-Befehle von Laravels composer.json ins Spiel und die Installation stürzt ab.

Dies liegt daran, dass composer.json Befehle wie folgt aussehen:

"post-install-cmd": [
    "php artisan clear-compiled",
    "php artisan optimize"
],

Wie Sie sehen können, wird der "Standard" Interpreter wieder verwendet!

Nun beginnen richtige PHP-Dateien mit folgendem Shebang:

#!/usr/bin/env php

Dies ist eine nette Eigenschaft, da der PHP-Interpreter an verschiedenen Orten auf verschiedenen Systemen gefunden werden kann. Leider gibt der Befehl env in diesem Fall den Pfad zur ersten ausführbaren Datei zurück, die er in der Umgebungsvariablen $PATH findet.

Wie könnte ich möglicherweise die aktuelle Session-Umgebung ändern oder welche Art von Trick für die Ausführung des gesamten Laravel-Installationsprozesses durchführen? /usr/bin/php5.6 command würde stattdessen /usr/bin/php5.6 anstelle von /usr/bin/php aufrufen?

Ich möchte die $PATH Variable nicht ändern oder Dateien wie composer , composer.json oder Laravels CLI-Dienstprogramm artisan ändern.

Edit: gehe auch davon aus, dass ich das von einem normalen Benutzerkonto (also ohne root-Berechtigungen) machen möchte.


Die Standard-PHP-Programmdatei kann wie folgt gefunden werden:

$ which php

In den meisten Fällen ist es ein Link zu einer bestimmten PHP-Version:

lrwxrwxrwx 1 root root      21 aug 15  2016 /usr/bin/php -> /usr/bin/php7.1

Um es in eine andere Version zu ändern, verknüpfen Sie es einfach mit einem anderen

$ sudo rm /usr/bin/php

$ sudo ln -s /usr/bin/php5.6 /usr/bin/php

Vor dem erneuten Verknüpfen müssen Sie sicherstellen, dass die Ziel-PHP-Version installiert ist.


Für alle anderen, die oben keine Lösung gefunden haben, weil sie das composer update und irgendwie die falsche PHP-Version benutzt wird. Durch die Verwendung der composer self-update ich weitere Informationen erhalten und herausgefunden, dass Sie in der config composer.json eine platform im config Bereich angeben können, die überschreibt, welche php-Version von composer verwendet wird. Einfach diesen Wert zu ändern oder diese Konfiguration zu entfernen, löste mein Problem.

composer.json "config": { "platform": { "php": "7.1" },


Seit PHP7 kam Debian Linux erstellt verschiedene ausführbare Dateien für PHP-Versionen 5 und 7 in / usr / bin standardmäßig (wenn Sie beide Versionen installieren, ist).

Der Aufruf dieser verschiedenen Versionen über die Befehlszeile ist so einfach wie immer:

[email protected]:~ $ php5 -v
PHP 5.6.26-0+deb8u1 (cli) (built: Sep 21 2016 12:37:50) 
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
    with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies


[email protected]:~ $ php -v
PHP 7.0.9-1~dotdeb+8.1 (cli) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies
    with Zend OPcache v7.0.9-1~dotdeb+8.1, Copyright (c) 1999-2016, by Zend Technologies

Dies ist offensichtlich nur gut für einfache Skripte. Für etwas Größeres (Komponist, Handwerker usw.) müssen Sie die PATH-Variable ändern.

Um die Version zu ändern, die Ihr Apache-Server verwendet, müssen Sie nur Folgendes tun:

[email protected]:~# a2dismod php5 && a2enmod php7.0
Module php5 disabled.
To activate the new configuration, you need to run:
  service apache2 restart
Considering conflict php5 for php7.0:
Enabling module php7.0.
To activate the new configuration, you need to run:
  service apache2 restart

und umgekehrt, wenn Sie die niedrigere PHP-Version verwenden möchten.

Erwähnen Sie es, falls jemand ähnliche Probleme mit Debian hat.


Vielleicht können Sie versuchen, die Umgebung zu reparieren!

$ php -v
PHP 5.4.x (cli) ...
$ set PATH="/usr/lib64/php5.6/bin:$PATH"
$ php -v
PHP 5.6.x (cli) ...

Wenn Sie den PATH für Ihre Shell-Sitzung nicht ändern möchten, können Sie die Änderung nur für den aktuellen Befehl festlegen:

$ php -v
PHP 5.4.x (cli) ...
$ env PATH="/usr/lib64/php5.6/bin:$PATH" php -v
PHP 5.6.x (cli) ...
$ php -v
PHP 5.4.x (cli) ...




env