วิธีการติดตั้ง php 7 เพื่อให้ทำงานข้าง php 5 บน Ubuntu ที่มี nginx


9

ฉันต้องการลอง php 7 และทำให้เว็บไซต์ของฉันทำงานบน php 7 ในเวลาเดียวกันทำให้เว็บไซต์อื่นทำงานบน php 5 ได้ในกรณี เพื่อให้จากการกำหนดค่าโฮสต์โดเมนเสมือนฉันสามารถตัดสินใจว่าจะใช้ php ใด

ฉันดูที่การจัดการเวอร์ชัน php และเห็นว่าเป็นไปได้ที่จะเรียกใช้สองเวอร์ชัน ฉันกำลังมองหาคำแนะนำที่ชัดเจนยิ่งขึ้นเกี่ยวกับวิธีการทำเช่นนี้ภายใต้ nginx ฉันยัง hhvm ทำงานในกรณีที่มีความสำคัญ

คำตอบ:


11

ประการแรกคุณต้องติดตั้งphp5-fpmและphp7.0-fpmจากPPA ของOndřejSurýสำหรับ php5 และ php7.0 ที่ติดตั้งร่วมได้ :

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

จากนั้นเราด้วยnginxแนะนำให้ใช้แพ็คเกจ FPM ดังนั้นติดตั้งแพ็คเกจตาม:

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

ที่มา: คำตอบใน "วิธีการติดตั้ง php 7" คำถามและความคิดเห็นที่กำหนดเองและการแก้ไขจากตัวเอง


ประการที่สองnginx. nginxสามารถทำได้ดีเท่าการกำหนดค่าของคุณ คุณน่าจะมีบล็อกการจัดการ PHP ในบล็อกเซิร์ฟเวอร์ nginx ของคุณคล้ายกับสิ่งนี้ (จากตัวอย่างการตั้งค่า 'เริ่มต้น'):

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

การกำหนดค่านี้จะส่งผ่านไปphp5-fpmเท่านั้น ซึ่งจะมีผลกับบล็อกเซิร์ฟเวอร์ทั้งหมดของคุณ วิธีที่ง่ายที่สุดในการทำเช่นนี้คือมีบล็อกเซิร์ฟเวอร์ตัวที่สอง (สำหรับ, พูด, test.domain.tld) และระบุfastcgi_passปลายทางPHP 7.0 แทน ใน php7.0 บน Xenial นี้จะจบลงบางอย่างเช่นนี้ (สกัดจากการแก้ไขเมื่อเร็ว ๆ นี้อัปโหลดไปยังแพคเกจ Nginx Xenial) แต่ผมไม่ทราบว่ารูปแบบของแพคเกจ Ondrej ของดังนั้นผมจึงไม่สามารถให้รายละเอียดที่แน่นอนนั่น (การตรวจสอบ/etc/php7.0/fpm/pool.d/www.confหรือ คล้ายกับกำหนดว่าฟังอยู่ที่ไหน):

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

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

คุณจะต้องทำสิ่งที่คล้ายกับphp5บล็อกของคุณเพื่อตรวจสอบว่าphp5.6มีการใช้ซ็อกเก็ตแทนphp5ซ็อกเก็ตในตัว(ซึ่งเราเพิ่งลบ)

จากนั้นใช้โดเมนทดสอบที่สองเพื่อเรียกใช้การphp7.0ทดสอบ อย่างไรก็ตามตรวจสอบให้แน่ใจว่าได้ทำสำเนาเว็บไซต์ของคุณหากคุณต้องการทำเช่นนี้ - เป็นไปได้ว่าจำเป็นต้องมีสำเนาทดสอบแยกต่างหากเพื่อที่ว่าเมื่อคุณเสร็จสิ้นการใช้งานphp7.0แล้วคุณสามารถ 'สลับ' โดยไม่ต้อง ปัญหา.

นอกจากนี้โชคไม่ดีที่ไม่มีวิธีที่ง่ายต่อการทำphp5และphp7.0การทำงานภายในบล็อกเซิร์ฟเวอร์เดียวกันได้โดยไม่ต้องเปลี่ยนเส้นทางของคุณสำหรับเว็บไซต์ของคุณการใช้งานอื่น ๆ ที่จะมีหนึ่งphp5และหนึ่งสำหรับphp7.0; การทำซ้ำไซต์ดังกล่าวอาจทำให้เกิดความน่ารังเกียจดังนั้นข้อเสนอแนะให้เรียกใช้รหัสไซต์สองชุดแยกต่างหากชุดหนึ่งสำหรับการphp7.0โยกย้ายและอีกชุดสำหรับphp5การผลิต


หากคุณเลือกด้วยวิธีนี้คุณควรใช้*php5.6*แพ็คเกจที่Ondřejจัดเตรียมและลบphp5แพ็คเกจธรรมดา
muru

@muru อาจจะถูกต้องฉันจะเขียนสิ่งนั้นใน
Thomas Ward

ขอบคุณ! สิ่งนี้ทำงานได้ดีกว่าที่ฉันคาดไว้ มีปัญหากับลูกแพร์และ cli ในตอนแรก แต่กลับกลายเป็นว่าเป็นข้อผิดพลาดใน repo ที่ฉันต้องการอัปเดตและใช้งานได้ เว็บไซต์ของฉันใช้งานได้อย่างรวดเร็วใน php7 มันน่าทึ่ง.
อัฒภาคหวั่น

ถุงเท้า fpm มีชื่อ 5.6 เช่นกัน
toster-cx

ตั้งแต่เกือบปี 2018 การกำหนดค่า php5.6 สำหรับfastcgi_pass unix:/var/run/php/php5.6-fpm.sock;
NGINX
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.