Cara menginstal php 7 agar bisa berjalan di samping php 5 di ubuntu dengan nginx

9

Saya ingin mencoba php 7 dan membuat situs saya bekerja di php 7 sekaligus menjaga situs lain bekerja di php 5 untuk berjaga-jaga. sehingga dari konfigurasi virtual host domain saya dapat memutuskan php mana yang akan dijalankan.

Saya melihat manajemen versi php dan melihat adalah mungkin untuk menjalankan dua versi, meskipun yang saya temukan sepertinya apache. Saya mencari instruksi yang lebih jelas tentang cara melakukan ini di bawah nginx. Saya juga memiliki hhvm berjalan jika itu penting.

Tanda titik koma yang ditakuti
sumber

Jawaban:

11

Pertama, Anda perlu menginstal php5-fpmdan php7.0-fpmdari PPA Ondřej Surý untuk php5 dan php7.0 yang dapat diinstal bersama. :

sudo apt-get install python-software-properties
sudo LC_ALL=en_US.UTF-8 add-apt-repository ppa:ondrej/php

Kami kemudian, dengan nginx, menyarankan menggunakan paket FPM. Jadi, instal paket sesuai:

sudo apt-get update

# We need to ***remove*** php5 packages, so we can use php5.6 packages
# from the PPA instead
sudo apt-get remove php5-common
sudo apt-get autoremove

# Now we install php5.6 packages.
sudo apt-get install php5.6-fpm

# Now, install php7.0-fpm.  You may need to install separate PHP plugins
# for databases, extensions, etc. later.
sudo apt-get install php7.0-fpm

Sumber: Jawaban di "Cara menginstal php 7?" pertanyaan , dan komentar serta modifikasi khusus dari saya.


Kedua nginx,. nginxhanya bisa sebagus konfigurasi Anda. Anda kemungkinan besar memiliki blok penanganan PHP pada blok server nginx Anda yang serupa dengan ini (dari contoh konfigurasi 'default'):

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000

location ~ \.php$ {
    include snippets/fastcgi-php.conf;

    # With php5-fpm:
    fastcgi_pass unix:/var/run/php5-fpm.sock;
}

Konfigurasi ini hanya akan diteruskan ke php5-fpm. Akibatnya, ini akan berlaku untuk seluruh blok server Anda. Cara termudah untuk melakukannya adalah memiliki blok server kedua (untuk, katakanlah test.domain.tld), dan berikan tujuan PHP 7.0 fastcgi_pass. Dalam php7.0 pada Xenial, ini akan berakhir seperti ini (diekstrak dari perbaikan yang baru-baru ini diunggah ke paket nenx Xenial), namun saya tidak tahu tata letak paket Ondrej jadi saya tidak bisa memberikan rincian yang pasti di sana (centang /etc/php7.0/fpm/pool.d/www.confatau mirip dengan menentukan di mana ia mendengarkan):

location ~ \.php$ {
    include snippets/fastcgi-php.conf;

    # With php7.0-fpm:
    fastcgi_pass unix:/var/run/php7.0-fpm.sock;
}

Anda harus melakukan sesuatu yang serupa untuk php5blok Anda , untuk memvalidasi bahwa php5.6soket digunakan sebagai pengganti soket built-in php5(yang baru saja kami lepaskan).

Kemudian, gunakan domain pengujian kedua untuk menjalankan php7.0pengujian. Pastikan, bagaimanapun, untuk membuat salinan situs Anda jika Anda ingin melakukan ini - kemungkinan akan perlu memiliki salinan pengujian terpisah sehingga setelah Anda selesai membuatnya bekerja dengan php7.0, Anda bisa 'beralih' tanpa isu.

Sayangnya, tidak ada cara mudah untuk membuat php5dan php7.0bekerja di dalam blok server yang sama, bukan tanpa mengubah jalur Anda untuk situs Anda, aplikasi, dll untuk memiliki satu untuk php5dan satu untuk php7.0; pengerjaan ulang situs seperti itu bisa menjadi tidak menyenangkan, maka saran untuk menjalankan dua salinan terpisah dari kode situs, satu untuk php7.0migrasi dan satu untuk php5produksi.

Thomas Ward
sumber
Jika Anda memilih cara ini, maka Anda harus tetap menggunakan *php5.6*paket yang disediakan Ondřej, dan menghapus php5paket biasa .
muru
@muru mungkin benar, saya akan menulisnya di
Thomas Ward
Terima kasih! Ini bekerja lebih baik dari yang saya harapkan. ada masalah dengan pear dan cli pada awalnya, tetapi ternyata itu adalah bug di repo yang saya perlu perbarui dan berhasil. Situs saya bekerja sangat cepat di php7. itu luar biasa.
Titik koma yang ditakuti
Kaus kaki fpm memiliki 5.6 dalam nama juga.
toster-cx
Pada hampir 2018, konfigurasi php5.6 untuk NGINX adalahfastcgi_pass unix:/var/run/php/php5.6-fpm.sock;
Ecksters