使用源碼編譯安裝PHP7php
2015年6月11日,PHP官網發佈消息,正式公開發布PHP7初版的alpha版本.html
PHP 7.0.0 Alpha 1使用新版的ZendEngine引擎,帶來了許多新的特性,如下是不徹底列表:
(1)性能提高:PHP7比PHP5.6性能提高了兩倍。 Improved performance: PHP 7 is up to twice as fast as PHP 5.6
(2)全面一致的64位支持。 Consistent 64-bit support
(3)之前的許多致命錯誤,如今改爲拋出異常。Many fatal errors are now Exceptions
(4)移除了一些老的不在支持的SAPI(服務器端應用編程端口)和擴展。Removal of old and unsupported SAPIs and extensions
(5)新增了空接合操做符。The null coalescing operator (??)
(6)新增長告終合比較運算符。Combined comparison Operator (<=>)
(7)新增長了函數的返回類型聲明。Return Type Declarations
(8)新增長了標量類型聲明。Scalar Type Declarations
(9)新增長匿名類。Anonymous Classesnginx
Mac-mini:~ WangTom$ uname -mnprs Darwin Mac-mini.local 14.3.0 x86_64 i386 Mac-mini:~ WangTom$ sw_vers ProductName: Mac OS X ProductVersion: 10.10.3 BuildVersion: 14D136
PHP7下載地址:https://downloads.php.net/~ab/編程
$ wget https://downloads.php.net/~ab/php-7.0.0alpha1.tar.bz2 $ tar jxf php-7.0.0alpha1.tar.bz2 $ cd php-7.0.0alpha1 $ ./configure ... ... checking size of long... (cached) 8 checking size of long long... (cached) 8 checking for iconv support... yes checking for iconv... no checking for libiconv... no configure: error: Please specify the install prefix of iconv with --with-iconv=<DIR>
安裝 libiconv (字符編碼轉換庫)
網站地址: http://www.gnu.org/software/libiconv/
當前版本: http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gzubuntu
$ wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz $ tar zxf libiconv-1.14.tar.gz $ cd libiconv-1.14 $ ./configure --prefix=/usr/local/lib/libiconv $ make $ sudo make install
配置參數vim
$ ./configure --prefix=/usr/local/php7 \ --enable-fpm \ --with-config-file-path=/usr/local/php7/etc \ --with-iconv=/usr/local/lib/libiconv \ 執行configure配置後,能夠看到有以下結果: ... ... Thank you for using PHP. config.status: creating php7.spec config.status: creating main/build-defs.h config.status: creating scripts/phpize config.status: creating scripts/man1/phpize.1 config.status: creating scripts/php-config config.status: creating scripts/man1/php-config.1 config.status: creating sapi/cli/php.1 config.status: creating sapi/cgi/php-cgi.1 config.status: creating ext/phar/phar.1 config.status: creating ext/phar/phar.phar.1 config.status: creating main/php_config.h config.status: executing default commands WangTomdeMacBook-Pro:php-7.0.0alpha1 wangtom$
$ make
$ make test
$ sudo make installapi
查看PHP7是否安裝成功
````
WangTomdeMacBook-Pro:php-7.0.0alpha1 wangtom$ /usr/local/php7/bin/php -v
PHP 7.0.0alpha1 (cli) (built: Jun 20 2015 00:04:19)
Copyright (c) 1997-2015 The PHP Group
Zend Engine v3.0.0-dev, Copyright (c) 1998-2015 Zend Technologies服務器
Mac-mini:~ WangTom$ sudo ln -s /usr/local/php7/bin/php /usr/bin/php7php7
Mac-mini:~ WangTom$ php -v
PHP 5.5.20 (cli) (built: Feb 25 2015 23:30:53)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologiessocket
Mac-mini:~ WangTom$ php7 -v
PHP 7.0.0alpha1 (cli) (built: Jun 23 2015 17:24:34)
Copyright (c) 1997-2015 The PHP Group
Zend Engine v3.0.0-dev, Copyright (c) 1998-2015 Zend Technologies
Mac-mini:php-fpm.d WangTom$ which php
/usr/bin/php
Mac-mini:php-fpm.d WangTom$ which php7
/usr/bin/php7
### 配置PHP-FPM: Nginx不支持對外部程序的直接調用或者解析,全部的外部程序(包括PHP)必須經過FastCGI接口來調用。 PHP-FPM是一個PHP FastCGI管理器,新版的PHP已經集成了php-fpm,在./configure的時候帶 –enable-fpm參數便可開啓PHP-FPM. FPM (FastCGI Process Manager) is an alternative PHP FastCGI implementation with some additional features (mostly) useful for heavy-loaded sites. 啓動 PHP-FPM:
Mac-mini:php7 WangTom$ /usr/local/php7/sbin/php-fpm
[23-Jun-2015 15:33:01] WARNING: Nothing matches the include pattern '/usr/local/php7/etc/php-fpm.d/*.conf' from /usr/local/php7/etc/php-fpm.conf at line 125.
[23-Jun-2015 15:33:01] ERROR: failed to open error_log (/usr/local/php7/var/log/php-fpm.log): Permission denied (13)
[23-Jun-2015 15:33:01] ERROR: failed to post process the configuration
[23-Jun-2015 15:33:01] ERROR: FPM initialization failed
提示錯誤說/usr/local/php7/var/log/php-fpm.log 沒權限,就給777權限: $ chmod 777 /usr/local/php7/var/log/ 修改 php-fpm 配置文件: $ cd /usr/local/php7/etc/ $ cp php-fpm.conf.default php-fpm.conf $ vim php-fpm.conf > 打開 error_log這一行的註釋,默認該項被註釋掉,若不修改會出現提示log文件路徑不存在 > error_log = /usr/local/php7/var/log/php-fpm.log > 打開inclue這一行的註釋 > include=/usr/local/php7/etc/php-fpm.d/*.conf 修改 /usr/local/php7/etc/php-fpm.d/www.conf 文件: 若是這個文件不存在,就從default複製一份: $ cd /usr/local/php7/etc/php-fpm.d/ $ cp www.conf.default www.conf 將配置文件中的 user 和 group 部分的 nobody 改爲 www: $ vim /usr/local/php7/etc/php-fpm.d/www.conf > user = www > group = www 開始啓動 php-fpm:
Mac-mini:php-7.0.0alpha1 WangTom$ /usr/local/php7/sbin/php-fpm
[23-Jun-2015 18:30:48] NOTICE: [pool www] 'user' directive is ignored when FPM is not running as root
[23-Jun-2015 18:30:48] NOTICE: [pool www] 'group' directive is ignored when FPM is not running as root
[23-Jun-2015 18:30:48] ERROR: unable to bind listening socket for address '127.0.0.1:9000': Address already in use (48)
[23-Jun-2015 18:30:48] ERROR: FPM initialization failed
這個錯誤問題有兩個:(1)沒有使用root帳戶執行啓動命令 (2)端口9000被佔用 解決方法: 使用root帳戶執行php-fpm啓動,或 sudo /usr/local/php7/sbin/php-fpm 關閉 PHP-fpm, 並從新啓動:
Mac-mini:~ WangTom$ lsof -P | grep ':9000' | awk '{print $2}' | xargs kill -9
Mac-mini:php-7.0.0alpha1 WangTom$ /usr/local/php7/sbin/php-fpm -t
[23-Jun-2015 18:30:25] NOTICE: configuration file /usr/local/php7/etc/php-fpm.conf test is successful
Mac-mini:~ WangTom$ sudo /usr/local/php7/sbin/php-fpm
Mac-mini:~ WangTom$
修改Nginx 配置: 在 nginx.conf 配置文件server 部分增長fastcgi配置,並從新加載配置文件:
Mac-mini:~ WangTom$ sudo vim /usr/local/nginx/conf/nginx.conf
location ~ .php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
Mac-mini:~ WangTom$ sudo /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
Mac-mini:~ WangTom$ sudo /usr/local/nginx/sbin/nginx -s reload
Mac-mini:~ WangTom$
```
用到的一些命令:
uname: 用來獲取電腦和操做系統的相關信息
sw_vers: Mac下查看系統版本信息
lsof: 列出當前系統打開文件(list open files)
which: 指令會在環境變量$PATH設置的目錄裏查找符合條件的文件
參考連接:
[END]