Kemungkinan besar, beberapa bagian dari artikel ini sudah tidak asing lagi bagi banyak habrozhitel, tetapi sehubungan dengan pembelian laptop baru, saya memutuskan untuk mengumpulkan semua biji-bijian bersama-sama dan mengatur alat yang nyaman untuk pengembangan. Saya sering harus bekerja dengan banyak proyek kecil, dengan versi PHP yang berbeda, sering menerjemahkan proyek lama ke versi baru. Di masa lalu, ketika saya adalah pengguna Windows, saya menggunakan OpenServer. Tetapi dengan beralih ke Linux, saya tidak memiliki kesederhanaan untuk menciptakan host dan mengganti versi yang ada di dalamnya. Karena itu, saya harus membuat solusi yang lebih nyaman di Linux =)
Tujuan
- Gunakan perangkat lunak saat ini pada saat penulisan
- Untuk membedakan antara domain lokal, kami akan menggunakan domain .loc khusus
- Kami menerapkan perpindahan versi PHP melalui subdomain menggunakan fast-cgi
- Pembuatan host otomatis dengan vhost_alias dan dnsmasq
Apa yang kita miliki pada akhirnya. Saat beralih ke
56.test.loc
Apache akan diluncurkan dengan PHP versi 5.6.36
/ var / www / test.loc /public_html/index.php
Mengubah subdomain menjadi
72 .test.loc
file yang sama akan diluncurkan tetapi sudah dengan versi PHP 7.2.7
Versi lain dikirimkan dengan cara yang sama seperti yang dijelaskan di bawah ini.
Untuk membuat situs lain, cukup buat di folder 
/ var / www / a dengan akhiran 
.loc , di dalamnya harus folder 
public_html yang merupakan akar dari situs
Itu saja. Karena tanpa siksaan tambahan, restart, dan mengedit konfigurasi, kami memiliki sistem otomatis untuk bekerja dengan situs.
Saya akan menguji semua ini di LinuxMint19, didasarkan pada Ubuntu18.04, jadi semuanya akan sama dengan itu.
Pertama, kami akan menyediakan paket yang diperlukan
sudo apt update sudo apt install build-essential pkg-config libxml2-dev libfcgi-dev apache2 libapache2-mod-fcgid postfix 
Kami menetapkan 
Postfix sebagai roti, sebagai solusi sederhana (dalam wizard instalasi, pilih semuanya secara default) untuk mengirim surat dari mesin lokal.
Karena ini adalah pengembangan lokal dan saya satu-satunya pengguna. Lebih nyaman bagi saya untuk mentransfer folder proyek ke direktori rumah saya. Mount dengan drive terpisah dan bermigrasi ketika saya menginstal ulang sistem. Cara termudah adalah dengan membuat tautan, maka Anda tidak perlu mengubah jalur di pengaturan dan jalur itu akrab bagi semua orang.
Kami menyalin folder yang dibuat oleh Apache ke direktori home, membuat tautan di tempatnya, tanpa lupa mengubah pengguna menjadi dirinya sendiri dan bertukar grup dengan Apache.
 sudo mv /var/www/ ~/www sudo ln -s ~/www /var/www sudo chown $USER:$USER -R ~/www sudo usermod -a -G www-data $USER sudo usermod -a -G $USER www-data 
Buat folder tempat kami akan mengumpulkan sumber PHP untuk versi yang berbeda
 sudo mkdir /usr/local/src/php-build 
Kami juga membutuhkan folder untuk skrip CGI
 sudo mkdir /var/www/cgi-bin 
Dan folder runtime untuk skrip yang sama, dengan hak
 sudo mkdir /var/run/mod_fcgid sudo chmod 777 /var/run/mod_fcgid 
Dan karena direktori yang kita miliki adalah dalam RAM, kami 
akan menambahkan pembuatannya pada startup sistem, untuk ini kami 
akan menambahkannya ke 
/etc/tmpfiles.d/fcgid.conf  #Type Path Mode UID GID Age Argument d /var/run/mod_fcgid 0755 www-data www-data - - 
Dnsmasq-base saya berasal dari kotak, jika tidak maka selalu dapat dikirimkan.
 sudo apt install dnsmasq 
Tambahkan aturan ke konfigurasinya. 
Anda dapat 
menemukan file konfigurasi 
dnsmasq.conf seperti ini
 sudo updatedb locate dnsmasq.conf 
Atau jika itu, seperti milik saya, adalah bagian dari NetworkManager, kemudian buat file konfigurasi baru di 
/etc/NetworkManager/dnsmasq.d/local.confTambahkan baris ke sana untuk mengarahkan ulang domain lokal kami ke mesin lokal.
 address=/loc/127.0.0.1 
Anda juga perlu mengaktifkan modul Apache yang diperlukan
 sudo a2enmod fcgid vhost_alias actions rewrite 
Persiapan awal selesai, kami melanjutkan ke perakitan berbagai versi lokal PHP. Untuk 
setiap versi PHP, lakukan 4 langkah berikut. Misalnya, 
5.6.361. Unduh kode sumber dari versi yang diinginkan dan buka paketnya
 cd /usr/local/src/php-build sudo wget http://pl1.php.net/get/php-5.6.36.tar.bz2/from/this/mirror -O php-5.6.36.tar.bz2 sudo tar jxf php-5.6.36.tar.bz2 
2. Kami mengumpulkan versi PHP yang diperlukan dari sumber, dan menaruhnya di 
/opt/php-5.6.36 sudo mkdir /opt/php-5.6.36 cd php-5.6.36 sudo ./configure --prefix=/opt/php-5.6.36 --with-config-file-path=/opt/php-5.6.36 --enable-cgi sudo make sudo make install sudo make clean 
3. Buat CGI untuk menangani versi ini di 
/var/www/cgi-bin/php-5.6.36.fcgi #!/bin/bash PHPRC=/opt/php-5.6.36/php.ini PHP_CGI=/opt/php-5.6.36/bin/php-cgi PHP_FCGI_CHILDREN=8 PHP_FCGI_MAX_REQUESTS=3000 export PHPRC export PHP_FCGI_CHILDREN export PHP_FCGI_MAX_REQUESTS exec /opt/php-5.6.36/bin/php-cgi 
4. Membuat file dapat dieksekusi
 sudo chmod +x /var/www/cgi-bin/php-5.6.36.fcgi 
5. Tambahkan tindakan untuk menangani setiap versi di 
/etc/apache2/mods-available/fcgid.conf <IfModule mod_fcgid.c> AddHandler fcgid-script fcg fcgi fpl Action application/x-httpd-php-5.6.36 /cgi-bin/php-5.6.36.fcgi AddType application/x-httpd-php-5.6.36 .php  
6. Tambahkan aturan untuk memproses setiap versi di 
/etc/apache2/sites-available/000-default.conf <VirtualHost *:80> # ServerNam ServerAlias *.loc #  CGI  ScriptAlias /cgi-bin /var/www/cgi-bin # DocumentRoot VirtualDocumentRoot /var/www/%2+/public_html #     <Directory /var/www/*.loc/> Options +ExecCGI -Indexes AllowOverride All Order allow,deny Allow from all <FilesMatch \.php$> #       <If "%{SERVER_NAME} =~ /56\..*?\.loc/"> SetHandler application/x-httpd-php-5.6.36 </If> <Else> # ,    ,    SetHandler application/x-httpd-php-7.2.7 </Else> </FilesMatch> </Directory> ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost> 
Yah, itu dia. Tetap hanya untuk me-restart apache dan dnsmasq dan gunakan
 sudo service apache2 restart sudo service network-manager restart 
Masukkan 
index.php situs uji baru 
phpinfo () dan verifikasi bahwa semuanya berfungsi.