讓你的舊PHP應用程式也能享受PHP 7的高性能, 自力救濟PHP 7 MySQL舊函數補回!

PHP 7自2015年末發表至今仍不斷有令人期待的速度突破, 目前的PHP 7.2.2為最新版本, 從每次的PHP 7升級就看到許多擴展函數被取消, 或是與以往PHP 5不相容的地方, 最大的問題是PHP 7就移除了mysql_開頭的舊函數, 這讓許多較老的PHP應用程式無法在PHP 7上執行, 雖然大多持續更新的PHP應用程式都支援多種MySQL資料庫函數, 像是較新的mysqli或PDO, 舊版應用程式可說是無緣上PHP 7了, 不過網路上有熱心人士將以往的PHP mysql擴展取出, 讓你有機會將mysql函數放回到PHP 7!

我參考https://ckon.wordpress.com/2015/08/06/put-mysql-functions-back-into-php-7/的做法, 測試PHP 7.2.2將mysql編入, 來執行舊的應用程式

PHP 7.2下載: https://secure.php.net/downloads.php

我的測試環境是Linux (Debian Wheezy), 將目前PHP 7.2.2最新版的Source Code抓回來
wget -O php-7.2.2.tar.gz http://tw2.php.net/get/php-7.2.2.tar.gz/from/this/mirror


解壓縮php-7.2.2.tar.gz
tar zxvf php-7.2.2.tar.gz


進入PHP Source Code的ext目錄, 後續取得mysql擴展
cd php-7.2.2/ext


照上述網站的教學, 將GitHub上的mysql擴展下載
git clone https://github.com/php/pecl-database-mysql mysql --recursive


這時ext目錄下新增了mysql, 回到PHP 7.2.2目錄, 移除configure檔案, 以靜態方式編譯入PHP
rm configure
./buildconf --force
./configure --with-mysql

若你還有其他擴展函數請一同加入

編譯PHP 7
make; make install


檢查PHP是否將mysql編入
php -m

有看到mysql就是成功了

要享受PHP 7的好處, 有個重要之處, 打開Zend OPCache, 編輯php.ini檔案
nano /etc/php7/php.ini

這裡請明確指定你真實的php.ini路徑

到[opcache]設定值章節
將OPCache加入, 以下是範例
zend_extension=opcache.so
[opcache]
; Determines if Zend OPCache is enabled
opcache.enable=1

標上紅字的地方就是需要加入或修改之處
OPCache其他設定值可參考網路上的做法

啟動你的Web Server, 享受舊PHP應用程式也能在PHP 7上的好處吧! 不過還是建議, 更新應用程式支援PHP 7才是根本做法
2018-02-06 17:27 發佈
這次改用Debian APT套件包裝, 使用vmware安裝了一台Debian 9虛擬機, 盡量不去用編譯方式安裝PHP 7, 但是傳統MySQL PECL仍是要編譯的, 以下為安裝PHP 7.0與mysql傳統函數支援步驟

安裝PHP 7.0
apt-get install php7.0 php7.0-cgi php7.0-dev php7.0-mysql

請注意這裡的php7.0-mysql是mysqli

從PECL找到傳統mysql函數(http://git.php.net/?p=pecl/database/mysql.git;a=summary), 找最新版本並下載它
curl -o mysql.tar.gz 'http://git.php.net/?p=pecl/database/mysql.git;a=snapshot;h=647c933b6cc8f3e6ce8a466824c79143a98ee151;sf=tgz'


解壓縮與編譯
tar zxvf mysql.tar.gz
cd mysql (實際為mysql-開頭的子目錄)
phpize
./configure
make
make install

這樣mysql.so會安裝到/usr/lib/php/20151012/目錄之下

接著到/etc/php/7.0/mods-available/目錄產生mysql.ini
cd /etc/php/7.0/mods-available/
nano mysql.ini


將以下內容貼入並存檔
; configuration for php mysql module
; priority=20
extension=mysql.so


啟用mysql傳統函數
phpenmod mysql


查看mysql傳統函數是否正確啟用
php -m


大致類似像這樣的輸出
[PHP Modules]
calendar
Core
ctype
date
dom
exif
fileinfo
filter
ftp
gettext
hash
iconv
json
libxml
mysql
mysqli
mysqlnd
openssl
pcntl
pcre
PDO
pdo_mysql
Phar
posix
readline
Reflection
session
shmop
SimpleXML
sockets
SPL
standard
sysvmsg
sysvsem
sysvshm
tokenizer
wddx
xml
xmlreader
xmlwriter
xsl
Zend OPcache
zlib

[Zend Modules]
Zend OPcache

這台機器的PHP 7.0就能用mysql與mysqli函數

或是更詳細的資訊
php -i | grep -i 'mysql'


以下為輸出範例:
Additional .ini files parsed => /etc/php/7.0/cli/conf.d/10-mysqlnd.ini,
/etc/php/7.0/cli/conf.d/20-mysql.ini,
/etc/php/7.0/cli/conf.d/20-mysqli.ini,
/etc/php/7.0/cli/conf.d/20-pdo_mysql.ini,
mysql
MySQL Support => enabled
Client API version => mysqlnd 5.0.12-dev - 20150407 - $Id: b5c5906d452ec590732a93b051f3827e02749b83 $
mysql.allow_local_infile => On => On
mysql.allow_persistent => On => On
mysql.connect_timeout => 60 => 60
mysql.default_host => no value => no value
mysql.default_password => no value => no value
mysql.default_port => no value => no value
mysql.default_socket => no value => no value
mysql.default_user => no value => no value
mysql.max_links => Unlimited => Unlimited
mysql.max_persistent => Unlimited => Unlimited
mysql.trace_mode => Off => Off

mysqli
MysqlI Support => enabled
Client API library version => mysqlnd 5.0.12-dev - 20150407 - $Id: b5c5906d452ec590732a93b051f3827e02749b83 $
mysqli.allow_local_infile => On => On
mysqli.allow_persistent => On => On
mysqli.default_host => no value => no value
mysqli.default_port => 3306 => 3306
mysqli.default_pw => no value => no value
mysqli.default_socket => no value => no value
mysqli.default_user => no value => no value
mysqli.max_links => Unlimited => Unlimited
mysqli.max_persistent => Unlimited => Unlimited
mysqli.reconnect => Off => Off
mysqli.rollback_on_cached_plink => Off => Off
mysqlnd
mysqlnd => enabled
Version => mysqlnd 5.0.12-dev - 20150407 - $Id: b5c5906d452ec590732a93b051f3827e02749b83 $
Loaded plugins => mysqlnd,debug_trace,auth_plugin_mysql_native_password,auth_plugin_mysql_clear_password,auth_plugin_sha256_password
API Extensions => mysql,mysqli,pdo_mysql
mysqlnd statistics =>
PDO drivers => mysql
pdo_mysql
PDO Driver for MySQL => enabled
Client API version => mysqlnd 5.0.12-dev - 20150407 - $Id: b5c5906d452ec590732a93b051f3827e02749b83 $
pdo_mysql.default_socket => /var/run/mysqld/mysqld.sock => /var/run/mysqld/mysqld.sock
內文搜尋
X
評分
評分
複製連結
Mobile01提醒您
您目前瀏覽的是行動版網頁
是否切換到電腦版網頁呢?