it-swarm.asia

Farklı kullanın PHP CLI sürümü bir komut için çalıştırılabilir

Bu yüzden, üç PHP sürümünün kurulu olduğu Gentoo kutusuna sahibim (nedenlerden sonra):

  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

Kurmak istiyorum Laravel çerçevesi besteci kullanarak:

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

Ancak bu, Laravel PHP> 5.5.9 gerektirdiğinden ve varsayılan php yorumlayıcısının 5.4 ..__ olmasını gerektirdiği için hata verir.

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

Bu beni bir adım daha ileri götürüyor, ancak daha sonra Laravel'in composer.json dosyasındaki bazı yükleme sonrası komutlar devreye giriyor ve yükleme çöküyor.

Bunun nedeni, composer.json komutlarının şöyle görünmesidir:

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

Gördüğünüz gibi, "varsayılan" tercüman tekrar kullanılıyor!

Şimdi, uygun PHP dosyaları Shebang ile başlar:

#!/usr/bin/env php

Bu, PHP yorumlayıcısının farklı sistemlerdeki farklı konumlarda bulunabileceği için güzel bir özellik .. .. Maalesef, bu durumda env komutu $PATH çevresel değişkeninde bulduğu ilk yürütülebilir dosyanın yolunu döndürür.

Tüm Laravel kurulum sürecinin yürütülmesi için mevcut oturum ortamını veya ne tür bir hile yapabilirim? php komutu /usr/bin/php5.6 yerine /usr/bin/php'yi çağırabilir mi?

$PATH değişkenini değiştirmek veya composer, composer.json veya Laravel'in CLI yardımcı programı artisan gibi dosyaları değiştirmek istemiyorum.


Düzenleme: ayrıca bunu normal kullanıcı hesabından yapmak istediğimi varsayalım (yani kök izni olmadan).

29
roomcays

Belki ortamı düzeltmeyi deneyebilirsin!

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

Veya, Shell oturumunuz için PATH'yi değiştirmek istemiyorsanız, değişikliği yalnızca geçerli komut için kapsamlayabilirsiniz:

$ 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

Varsayılan PHP çalıştırılabilir dosya kullanılarak bulunabilir:

$ which php

Çoğu durumda belirli bir PHP sürümüyle bağlantılıdır:

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

Farklı sürüme değiştirmek için sadece başka birine bağlamak

$ Sudo rm /usr/bin/php

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

Yeniden bağlamadan önce, hedef PHP sürümünün kurulu olduğundan emin olmalısınız.

18
Saleniex

Geçerli genel php komutunun nerede olduğunu ve which php ile hangi ikilikle işaret ettiğini belirleyin.

Size sorunuzda bahsettiğiniz gibi bir sembolik yol gösterecektir

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

Şimdilik istediğiniz php sürümünün hangi noktaya geleceğini işaret etmek için sembol linkini düzenleyin, buraya bakın https://unix.stackexchange.com/questions/88824/how-can-i-edit-symlinks

İşiniz bittiğinde işlemi tersine çevirin.

GÜNCELLEME: Ayrıca, geçerli kullanıcı için ~/.bashrc dosyasını düzenleyerek ve aşağıdakileri ekleyerek bir alias ekleyebilirsiniz.

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

bakalım bu işe yarayacak mı

9
Alex Andrei

PHP7 geldiğinden beri Debian Linux, PHP sürüm 5 ve 7 için varsayılan olarak/usr/bin'de (yani her iki sürümü de yüklerseniz) farklı çalıştırılabilir dosyalar oluşturur.

Bu farklı sürümleri komut satırından çağırmak şimdi olduğu kadar basit:

[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

Bu açıkçası sadece basit scriptler için iyidir. Daha büyük bir şey (besteci, zanaatkar vb.) İçin PATH değişkenini değiştirmeniz gerekecektir.

Apache sunucunuzun yapması gereken her şeyi kullandığı sürümü değiştirmek için:

[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

ve alt PHP sürümünü kullanmak istiyorsanız bunun tersi geçerli olur.

Birisinin Debian ile ilgili benzer problemleri olması durumunda bahsetmek.

6
Krzysztof Karski

Yukarıda çözüm bulamayan biri için, çünkü composer update kullanıyorlar ve bir şekilde yanlış PHP versiyonu kullanılıyor. composer self-update kullanarak daha fazla bilgi edindim ve nihayet, composer.json'da, ne tür bir php versiyonunun besteci tarafından kullanıldığını geçersiz kılan platform bölümünde config belirtebileceğini öğrendim. Bu değeri değiştirmek ya da bu yapılandırmayı kaldırmak sorunumu çözdü.

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

0
Rein Baarsma

alias işlevini kullanmak mümkündür, ancak takma adların varsayılan olarak genişletilmediğini unutmayın.

Bunları genişletmeyi de etkinleştirmelisiniz.

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

Aynı şeyi elde etmek için en kolay olanı, örneğin bir yazılım bağlantısı oluşturmak gibi bulmak

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

o zaman varsayılan sürümünüzü kullandığınızda alternatif sürüm için php7.2'nin sadece php olduğunu söyleyebilirsiniz. php7 veya php71 veya php56

burada ln -s /opt/php-7.1/bin/php /usr/bin/php71 kaynak/orjinal dosya ve /usr/bin/php7 hedef/link

0
Joshi