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



change set (5)

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.


Answers

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.


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.


Identifizieren Sie, wo der aktuelle generische php Befehl ist und auf welchen Binärcode er mit which php .

Es wird Ihnen einen Pfad zu einem Symlink geben, den Sie in Ihrer Frage angeben

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

Bearbeiten Sie den Symlink, um zu zeigen, welche PHP-Version Sie gerade verwenden möchten, siehe https://unix.stackexchange.com/questions/88824/how-can-i-edit-symlinks

Wenn Sie fertig sind, kehren Sie den Vorgang um.

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

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

Schau, ob das klappt


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" },


Wenn möglich, geben Sie die Typen Ihrer Parameter an. Es funktioniert jedoch nur mit einfachen Typen wie int, bool und float.

$unsafe_variable = $_POST['user_id'];

$safe_variable = (int)$unsafe_variable ;

mysqli_query($conn, "INSERT INTO table (column) VALUES ('" . $safe_variable . "')");




php linux laravel command-line-interface env