Cách cài đặt php 7 để chạy bên cạnh php 5 trên Ubuntu với nginx


9

Tôi muốn dùng thử php 7 và để trang web của tôi hoạt động trên php 7 đồng thời giữ cho các trang web khác hoạt động trên php 5 chỉ trong trường hợp. để từ cấu hình máy chủ ảo tên miền, tôi có thể quyết định chạy php nào.

Tôi đã xem xét quản lý phiên bản php và thấy có thể chạy hai phiên bản, mặc dù những phiên bản tôi tìm thấy có vẻ như bị lỗi. Tôi đang tìm kiếm hướng dẫn rõ ràng hơn về cách làm điều này dưới nginx. Tôi cũng đã chạy hhvm trong trường hợp có vấn đề.

Câu trả lời:


11

Trước tiên, bạn cần cài đặt php5-fpmphp7.0-fpmtừ PPA của Ondřej Surý cho php5 và php7.0 có thể cài đặt được. :

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

Chúng tôi sau đó, với nginx, đề nghị sử dụng các gói FPM. Vì vậy, cài đặt các gói phù hợp:

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

Nguồn: Câu trả lời về "Cách cài đặt php 7?" câu hỏi , và nhận xét tùy chỉnh và sửa đổi từ bản thân tôi.


Thứ hai , nginx. nginxchỉ có thể tốt như cấu hình của bạn. Bạn rất có thể có một khối xử lý PHP trên (các) khối máy chủ nginx của bạn tương tự như thế này (từ cấu hình ví dụ 'mặc định'):

# 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;
}

Cấu hình này sẽ chỉ vượt qua php5-fpm. Trong thực tế, điều này sẽ áp dụng cho toàn bộ khối máy chủ của bạn. Cách dễ nhất để thực hiện điều này là có một khối máy chủ thứ hai (ví dụ: giả sử test.domain.tld) và cung cấp thay thế đích PHP 7.0 fastcgi_pass. Trong php7.0 trên Xenial, điều này sẽ kết thúc một cái gì đó như thế này (được trích xuất từ ​​một bản sửa lỗi được tải lên gần đây với gói Xenial nginx), tuy nhiên tôi không biết cách bố trí gói Ondrej vì vậy tôi không thể đưa ra thông tin cụ thể chính xác ở đó (kiểm tra /etc/php7.0/fpm/pool.d/www.confhoặc tương tự để xác định nơi nó đang nghe):

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

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

Bạn sẽ phải làm một cái gì đó tương tự cho php5khối của mình , để xác thực rằng php5.6các ổ cắm được sử dụng thay vì php5ổ cắm tích hợp (mà chúng tôi vừa gỡ bỏ).

Sau đó, sử dụng miền thử nghiệm thứ hai để chạy php7.0thử nghiệm. Tuy nhiên, hãy đảm bảo tạo một bản sao của trang web của bạn nếu bạn muốn làm điều này - có thể cần phải có một bản sao thử nghiệm riêng biệt để sau khi bạn hoàn thành việc này php7.0, bạn có thể 'chuyển đổi' mà không cần vấn đề.

Thật không may, không có cách dễ dàng để tạo php5php7.0hoạt động trong cùng một khối máy chủ, không phải là không thay đổi đường dẫn của bạn cho trang web, ứng dụng, v.v. để có một cho php5và một cho php7.0; việc làm lại các trang web như vậy có thể trở nên khó chịu, do đó đề xuất chạy hai bản sao riêng biệt của mã trang web, một cho php7.0di chuyển và một cho php5sản xuất.


Nếu bạn chọn cách này, thì bạn nên sử dụng các *php5.6*gói mà Ondřej cung cấp và xóa các php5gói đơn giản .
muru

@muru có lẽ đúng, tôi sẽ viết nó trong
Thomas Ward

Cảm ơn! Điều này làm việc tốt hơn tôi mong đợi. ban đầu có vấn đề với lê và cli, nhưng hóa ra đó là một lỗi trong repo tôi cần cập nhật và nó đã hoạt động. Trang web của tôi hoạt động rất nhanh trên php7. ngạc nhiên.
Dấu chấm phẩy đáng sợ

Sock fpm cũng có 5,6 trong tên.
toster-cx

Tính đến gần năm 2018, cấu hình php5.6 cho NGINX làfastcgi_pass unix:/var/run/php/php5.6-fpm.sock;
Ecksters
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.