wake-up-neo.com

Verwenden Sie anders PHP ausführbare CLI-Datei für einen Befehl

Ich habe also eine Gentoo-Box mit drei PHP Versionen installiert (egal aus welchen Gründen):

  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 using Composer installieren:

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

Dies führt jedoch zu einem Fehler, da Laravel PHP> 5.5.9 benötigt und der Standardinterpretierer php5.4 ..__ ist. Ich gebe einen anderen Befehl aus:

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

Dies bringt mich einen Schritt weiter, aber dann kommen einige Befehle nach der Installation von Laravel's composer.json ins Spiel und die Installation stürzt ab.

Dies liegt daran, dass composer.json-Befehle folgendermaßen aussehen:

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

Wie Sie sehen, wird der "Standard" -Interpreter wieder verwendet!

Nun beginnen korrekte PHP -Dateien mit folgendem Shebang:

#!/usr/bin/env php

Dies ist eine nette Funktion, da sich der Interpreter PHP unter verschiedenen Speicherorten auf verschiedenen Systemen befindet. Unglücklicherweise gibt der Befehl env den Pfad zur ersten ausführbaren Datei zurück, die in der Umgebungsvariable $PATH gefunden wird.

Wie könnte ich möglicherweise die aktuelle Sitzungsumgebung ändern oder welche Art von Trick auszuführen ist, würde der Befehl php für die Ausführung des gesamten Laravel-Installationsprozesses /usr/bin/php5.6 anstelle von /usr/bin/php aufrufen.

Ich möchte keine $PATH-Variable ändern oder Dateien wie composer, composer.json oder das CLI-Hilfsprogramm von Laravel artisan ändern.


Bearbeiten: Ich gehe außerdem davon aus, dass ich dies von einem normalen Benutzerkonto aus machen möchte (d. H. Ohne Root-Berechtigungen).

29
roomcays

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 vornehmen:

$ 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) ...
32
Guillaume Crico

Die Standarddatei PHP kann gefunden werden mit:

$ which php

In den meisten Fällen handelt es sich um einen 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, verbinden Sie es einfach mit einer 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 Zielversion PHP installiert ist.

18
Saleniex

Stellen Sie fest, wo sich der aktuelle generische Befehl php befindet und auf welche Binärdatei er mit which php verweist.

Sie erhalten einen Pfad zu einem Symlink, wie Sie ihn in Ihrer Frage erwähnen

/usr/bin/php -> /usr/lib64/php5.4/bin/php 

Bearbeiten Sie den Symlink so, dass er auf die PHP-Version verweist, die Sie jetzt möchten, siehe hier https://unix.stackexchange.com/questions/88824/how-can-i-edit-symlinks

Wenn Sie fertig sind, kehren Sie einfach den Prozess um.

UPDATE: Sie können auch eine alias für den aktuellen Benutzer hinzufügen, indem Sie ~/.bashrc bearbeiten und Folgendes hinzufügen

alias php='/usr/bin/php5.6'

sehen, ob das klappt

9
Alex Andrei

Seit der Einführung von PHP7 erstellt Debian Linux standardmäßig verschiedene ausführbare Dateien für PHP Version 5 und 7 in/usr/bin (wenn Sie beide Versionen installieren).

Das Aufrufen dieser verschiedenen Versionen über die Befehlszeile ist jetzt so einfach wie nie zuvor:

[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 natürlich nur für einfache Skripte gut. Für alles Größere (Komponist, Handwerker usw.) müssen Sie die Variable PATH ändern.

Um die Version zu ändern, die Ihr Apache-Server verwendet, müssen Sie lediglich 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 Version PHP verwenden möchten.

Erwähnen, falls jemand ähnliche Probleme unter Debian hat.

6

Für alle anderen, die oben keine Lösung gefunden haben, weil sie composer update verwenden und irgendwie die falsche PHP -Version verwendet wird. Durch die Verwendung von composer self-update erhielt ich weitere Informationen und fand schließlich heraus, dass Sie in composer.json eine platform im Abschnitt config angeben können, die die vom Composer verwendete PHP-Version überschreibt. Durch das Ändern dieses Werts oder das Entfernen dieser Konfiguration wurde mein Problem behoben.

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

0
Rein Baarsma

Es ist möglich, alias zu verwenden. Beachten Sie jedoch, dass Aliase standardmäßig nicht erweitert werden.

Sie müssen auch die Erweiterung aktivieren.

shopt -s expand_aliases alias php="/usr/local/bin/php-5.6" ./some-script.sh unalias php # back to previous version

Am einfachsten finde ich das Gleiche wie das Erstellen eines Softlinks wie zum Beispiel

ln -s /opt/php-7.0.32/bin/php /usr/bin/php7

ln -s /opt/php-7.1/bin/php /usr/bin/php71

ln -s /opt/php-5.6/bin/php /usr/bin/php56

wenn Sie Ihre Standardversion verwenden, sagen Sie, es ist PHP7.2. Als PHP-Version für alternative Version können Sie php7 oder php71 oder php56

hier ist ln -s /opt/php-7.1/bin/php /usr/bin/php71 die Quell-/Originaldatei und /usr/bin/php7 ist das Ziel/der Link

0
Joshi