Vietnamese (Tiếng Việt) translation by Shu Wu (you can also view the original English article)



Hình minh hoạ từ PONTIER
Giới thiệu
PHP 7 được phát hành vào cuối tháng mười hai. Một khi bạn đã kiểm thử code của bạn với nó tại máy cục bộ, thì đây là lúc để nâng cấp máy chủ thật sự của bạn. Nhìn chung, tôi thấy rằng hầu hết các trang web của tôi chạy tốt trên nó.
Tuy nhiên, tôi e là có nhiều trang web vẫn chưa được nâng cấp. Thường thì sẽ an toàn hơn và dễ dàng hơn nếu tiếp tục sử dụng các phiên bản cũ hơn. Trong thực tế, một cuộc khảo sát về các trang web WordPress cho thấy rằng có một số trang là đã nâng cấp:
"Theo như tháng năm 2016, 52,9% của các trang web WordPress chạy một phiên bản PHP cũ hơn 5.5. Chỉ 3,4% trang web WordPress chạy PHP 7, phiên bản hiện tại của PHP." thông qua PHP Compatibility Checker.
Nhưng PHP 7 đã gần một năm tuổi.
Trong bài học của ngày hôm nay, tôi sẽ hướng dẫn bạn đi qua các phương pháp tiếp cận được được khuyến khích của tôi để nâng cấp lên PHP 7 trên Ubuntu 14.x và giải quyết các vấn đề với PHPMyAdmin, điều mà rất nhiều người nâng cấp đã gặp phải.
Tại thời điểm này, nếu bạn đang sử dụng WordPress, cài đặt plugin PHP Compatibility Checker để đảm bảo rằng bạn sẽ không gặp bất kỳ vấn đề bất ngờ với các plugin của bạn.
Tôi luôn luôn đánh giá cao những ý tưởng và thông tin phản hồi của bạn. Nếu bạn có một câu hỏi hay một gợi ý, xin vui lòng để lại suy nghĩ của bạn trong phần bình luận dưới đây.
Bạn có thể liên hệ trực tiếp với tôi trên Twitter @reifman. Điều này đặc biệt đúng với các script nâng cấp phổ biến như cái này—nơi trải nghiệm của chính người dùng và đầu vào sẽ là duy nhất và có giá trị.
Nâng cấp máy chủ của bạn
Tôi cố gắng sử dụng một số hướng dẫn tiêu chuẩn để nâng cấp PHP 7 và gặp phải một loạt các vấn đề khác nhau. Vì vậy, các script mà tôi chia sẻ với các bạn dưới đây đã được thử nghiệm nhiều lần, và tôi tin rằng những gì tôi trình bày sẽ hoạt động tốt với bạn.
Một lần nữa, tôi đánh giá rất cao Digital Ocean giúp dễ dàng để sao lưu máy chủ của tôi và liên tục tạo ra các trường hợp thử nghiệm cho hoạt động thông qua các bước nâng cấp từ đầu.
Hãy bắt đầu nào.
Lưu ý bất kỳ tuỳ chỉnh nào đối với PHP 5
Tại thời điểm này, bạn có thể lưu ý đến tập tin tuỳ chỉnh PHP .ini của bạn và có thể sao lưu tập tin PHP .ini của bạn vì bạn sẽ cần phải di trú những điều này sang PHP 7 sau này.
Lệnh sau đây sẽ giúp bạn tìm thấy tập tin .ini của bạn:
1 |
$ php --ini |
Việc này sẽ cho tôi những thứ sau:
1 |
$ php --ini |
2 |
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php5/20121212/newrelic.so' - /usr/lib/php5/20121212/newrelic.so: cannot open shared object file: No such file or directory in Unknown on line 0 |
3 |
Configuration File (php.ini) Path: /etc/php5/cli |
4 |
Loaded Configuration File: /etc/php5/cli/php.ini |
5 |
Scan for additional .ini files in: /etc/php5/cli/conf.d |
6 |
... |
Đối với Apache, của tôi là ở trong /etc/php5/apache2
.
Loại bỏ PHP5 và các gói liên quan
Trước tiên, chúng ta hãy dọn sạch tất cả gói PHP cũ của chúng ta. Tôi thấy rằng tốt nhất là làm điều này một cách triệt để, bao gồm không chỉ PHP5 mà còn 5.5 và 5.6, mà tôi đã thử nghiệm với chúng trên máy chủ của tôi.
1 |
$ sudo apt-get -y purge php php-common php-mcrypt php-mbstring |
2 |
$ sudo apt-get -y purge php5 php5-common php5-cli libapache2-mod-php5 php5-curl php5-gd php5-imap php5-intl php5-json php5-mcrypt php5-mysql php5-pspell php5-readline php5-sqlite |
3 |
$ sudo apt-get -y purge php5.5 php5.5-common php5.5-mcrypt php5.5-mbstring |
4 |
$ sudo apt-get -y purge php5.6 php5.6-common |
5 |
$ sudo apt-get autoremove |
Khi tôi không dọn sạch tất cả các phiên bản khác nhau của PHP, tôi gặp các vấn đề sau đó cố gắng để cấu hình PHP 7. Nếu bạn có một cách tiếp cận đơn giản, hãy chia sẻ nó trong phần bình luận.
Thêm một gói lưu trữ riêng cho PHP7 và PHPMyAdmin



1 |
$ sudo add-apt-repository ppa:ondrej/php |
2 |
Co-installable PHP versions: PHP 5.5, 5.6, PHP 7.0 and batteries included. |
3 |
|
4 |
You can get more information about the packages at https://deb.sury.org |
5 |
|
6 |
For PHP 5.4 on Ubuntu 12.04 use: ppa:ondrej/php5-oldstable |
7 |
|
8 |
BUGS&FEATURES: This PPA now has a issue tracker: https://deb.sury.org/#bug-reporting |
9 |
|
10 |
PLEASE READ: If you like my work and want to give me a little motivation, please consider donating regularly: https://donate.sury.org/ |
11 |
|
12 |
WARNING: add-apt-repository is broken with non-UTF-8 locales, see https://github.com/oerdnj/deb.sury.org/issues/56 for workaround:
|
13 |
|
14 |
# LC_ALL=C.UTF-8 add-apt-repository ppa:ondrej/php
|
15 |
More info: https://launchpad.net/~ondrej/+archive/ubuntu/php |
16 |
Press [ENTER] to continue or ctrl-c to cancel adding it |
17 |
|
18 |
gpg: keyring `/tmp/tmpj6czswxr/secring.gpg' created |
19 |
gpg: keyring `/tmp/tmpj6czswxr/pubring.gpg' created
|
20 |
gpg: requesting key E5267A6C from hkp server keyserver.ubuntu.com |
21 |
gpg: /tmp/tmpj6czswxr/trustdb.gpg: trustdb created |
22 |
gpg: key E5267A6C: public key "Launchpad PPA for Ondřej Surý" imported
|
23 |
gpg: Total number processed: 1 |
24 |
gpg: imported: 1 (RSA: 1) |
25 |
OK |
Và sau đó tôi cập nhật các gói và bản phân phối của tôi và làm sạch bất kỳ tập tin nào còn lại:
1 |
$ sudo apt-get update |
2 |
$ sudo apt-get dist-upgrade |
3 |
$ sudo apt-get autoremove |
Có thể bạn sẽ thấy những lỗi như thế này:
1 |
The link /vmlinuz.old is a damaged link |
2 |
Removing symbolic link vmlinuz.old
|
3 |
you may need to re-run your boot loader[grub] |
Tôi đã lựa chọn khởi động lại vào thời điểm này, và điều đó dường như đã có tác dụng:
1 |
$ sudo reboot |
Cài đặt PHP7
Tiếp theo, chúng ta cài đặt PHP7, và tất cả các gói của nó:
1 |
sudo apt-get install php7.0 php7.0-mysql libapache2-mod-php7.0 php-apcu php7.0-gd php7.0-mcrypt php-memcache php7.0-curl php7.0-tidy php-xml php-json php7.0-mbstring php-gettext libmcrypt-dev mcrypt php-gd libmcrypt4 libmhash2 libtidy5 libxslt1.1 php-apcu-bc php-pear php7.0-mbstring php7.0-xml |
Tại thời điểm này bạn sẽ muốn di trú bất kỳ thiết lập đã thay dổi nào ở trong tập tin cấu hình của bạn sang tập tin /etc/php/7.0/apache2/php.ini
.
Tôi cũng đã cần phải thêm extension=apc.so
vào tập tin php.ini của tôi.
1 |
$ sudo nano /etc/php/7.0/apache2/php.ini |
Tôi đã dán nó ở đây:
1 |
;extension=php_openssl.dll |
2 |
;extension=php_pdo_firebird.dll |
3 |
;extension=php_pdo_mysql.dll |
4 |
;extension=php_pdo_oci.dll |
5 |
;extension=php_pdo_odbc.dll |
6 |
;extension=php_pdo_pgsql.dll |
7 |
;extension=php_pdo_sqlite.dll |
8 |
;extension=php_pgsql.dll |
9 |
;extension=php_shmop.dll |
10 |
extension=apc.so |
Vô hiệu hoá PHPMyAdmin
Tại thời điểm này, nếu bạn đang chạy PHPMyAdmin, bạn sẽ gặp một số vấn đề về nạp lại Apache. Nếu như vậy, bạn sẽ cần phải vô hiệu hoá PHPMyAdmin:
1 |
$ sudo nano /etc/apache2/apache2.conf |
Chuyển dòng code ở dưới cùng thành dòng chú thích:
1 |
# Include of directories ignores editors' and dpkg's backup files,
|
2 |
# see README.Debian for details.
|
3 |
|
4 |
# Include generic snippets of statements
|
5 |
IncludeOptional conf-enabled/*.conf
|
6 |
|
7 |
# Include the virtual host configurations:
|
8 |
IncludeOptional sites-enabled/*.conf
|
9 |
|
10 |
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
|
11 |
# Include /etc/phpmyadmin/apache.conf
|
Sau đó, tôi kích hoạthoạt mcrypt
và mbstring
và sau đó khởi động lại Apache:
1 |
$ sudo phpenmod mcrypt |
2 |
$ sudo phpenmod mbstring |
3 |
$ sudo service apache2 restart |
Tôi thử nghiệm trên một máy chủ chạy ứng dụng được xây dựng chỉ bằng HTML, PHP và Yii1.x, và tất cả chúng đều hoạt động.
Cài đặt lại PHPMyAdmin
Tiếp theo, hãy sửa lại cài đặt của PHPMyAdmin. Rất nhiều người phải vật lộn với điều này.
Đầu tiên, tôi thêm vào kho chứa gói bằng nijel:
1 |
$ sudo add-apt-repository ppa:nijel/phpmyadmin |
2 |
Latest phpMyAdmin packages - https://www.phpmyadmin.net/. Based on packages available in Debian.
|
3 |
|
4 |
There are some notable changes: |
5 |
|
6 |
* it currently requires updated PHP packages, you can get packages from https://launchpad.net/~ondrej/+archive/ubuntu/php/
|
7 |
* it does include embedded copies of PHP libraries
|
8 |
|
9 |
If you like phpMyAdmin, you can support it's further development at https://www.phpmyadmin.net/donate/ or https://www.phpmyadmin.net/sponsors/, thanks!
|
10 |
More info: https://launchpad.net/~nijel/+archive/ubuntu/phpmyadmin
|
11 |
Press [ENTER] to continue or ctrl-c to cancel adding it
|
12 |
|
13 |
gpg: keyring `/tmp/tmp6zix40vr/secring.gpg' created
|
14 |
gpg: keyring `/tmp/tmp6zix40vr/pubring.gpg' created |
15 |
gpg: requesting key 06ED541C from hkp server keyserver.ubuntu.com
|
16 |
gpg: /tmp/tmp6zix40vr/trustdb.gpg: trustdb created
|
17 |
gpg: key 06ED541C: public key "Launchpad PPA for Michal Čihař" imported
|
18 |
gpg: no ultimately trusted keys found
|
19 |
gpg: Total number processed: 1
|
20 |
gpg: imported: 1 (RSA: 1)
|
21 |
OK
|
Sau đó, tôi cập nhật các gói và cài đặt PHPMyAdmin:
1 |
$ sudo apt-get update |
2 |
$ sudo apt-get install phpmyadmin |
Lưu ý, điều này vẫn sẽ tải lại một đống các gói PHP 5.x cũ hơn, nhưng cuối cùng PHPMyAdmin sẽ hoạt động.
Sau đó, tôi chuyển dòng code PHPMyAdmin mà tôi đã chuyển thành dòng thú thích trước đó về dòng code bình thường.
1 |
$ sudo nano /etc/apache2/apache2.conf |
Ở đây:
1 |
# Include of directories ignores editors' and dpkg's backup files,
|
2 |
# see README.Debian for details.
|
3 |
|
4 |
# Include generic snippets of statements
|
5 |
IncludeOptional conf-enabled/*.conf
|
6 |
|
7 |
# Include the virtual host configurations:
|
8 |
IncludeOptional sites-enabled/*.conf
|
9 |
|
10 |
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
|
11 |
Include /etc/phpmyadmin/apache.conf |
Và khởi động lại Apache:
1 |
$ sudo service apache2 restart |
Bảo mật cài đặt PHPMyAdmin của bạn
Cài đặt này của PHPMyAdmin quay trở lại vào vị trí mặc định của nó, điều đó là rất không an toàn và có thể hack được. Xin vui lòng làm theo hướng dẫn Cài đặt và sử dụng PHPMyAdmin với WordPress để bảo mật tốt hơn cài đặt của bạn.
Kiểm tra PHP 7 đã chạy hay chưa
Sau đó, tôi xây dựng một tập tin phpinfo()
nhỏ; tập tin để kiểm tra PHP 7 đã hoạt động hay chưa:



Phần cuối
Nâng cấp lên PHP 7 trên Ubuntu 14.x của tôi đã gặp vấn đề và yêu cầu rất nhiều thay đổi từ các script đã được đưa ra để hoàn tất việc nâng cấp. Tôi hy vọng bạn thấy hướng dẫn hôm nay thật sự hữu ích.
Nếu bạn thích điều này, xin hãy theo dõi các hướng dẫn sắp tới trong loạt bài Lập trình với Yii2 và Xây dựng Startup của bạn với PHP, cung cấp tư liệu về tiến trình xây dựng startup của tôi, Meeting Planner.
Bạn còn có thể theo dõi tôi @reifman trên Twitter hoặc xem qua trang giảng viên của tôi để cập nhật.