|
| 1 | +php7-install.md |
| 2 | + |
| 3 | +使用源码编译安装PHP7 |
| 4 | + |
| 5 | +2015年6月11日,PHP官网发布消息,正式公开发布PHP7第一版的alpha版本. |
| 6 | + |
| 7 | +### PHP7特性: |
| 8 | + |
| 9 | +PHP 7.0.0 Alpha 1使用新版的ZendEngine引擎,带来了许多新的特性,以下是不完全列表: |
| 10 | +(1)性能提升:PHP7比PHP5.6性能提升了两倍。 Improved performance: PHP 7 is up to twice as fast as PHP 5.6 |
| 11 | +(2)全面一致的64位支持。 Consistent 64-bit support |
| 12 | +(3)以前的许多致命错误,现在改成抛出异常。Many fatal errors are now Exceptions |
| 13 | +(4)移除了一些老的不在支持的SAPI(服务器端应用编程端口)和扩展。Removal of old and unsupported SAPIs and extensions |
| 14 | +(5)新增了空接合操作符。The null coalescing operator (??) |
| 15 | +(6)新增加了结合比较运算符。Combined comparison Operator (<=>) |
| 16 | +(7)新增加了函数的返回类型声明。Return Type Declarations |
| 17 | +(8)新增加了标量类型声明。Scalar Type Declarations |
| 18 | +(9)新增加匿名类。Anonymous Classes |
| 19 | + |
| 20 | +### 系统环境: |
| 21 | +``` |
| 22 | +Mac-mini:~ WangTom$ uname -mnprs |
| 23 | +Darwin Mac-mini.local 14.3.0 x86_64 i386 |
| 24 | +
|
| 25 | +Mac-mini:~ WangTom$ sw_vers |
| 26 | +ProductName: Mac OS X |
| 27 | +ProductVersion: 10.10.3 |
| 28 | +BuildVersion: 14D136 |
| 29 | +``` |
| 30 | + |
| 31 | +### 源码安装PHP7: |
| 32 | + |
| 33 | +PHP7下载地址:https://downloads.php.net/~ab/ |
| 34 | + |
| 35 | +``` |
| 36 | +$ wget https://downloads.php.net/~ab/php-7.0.0alpha1.tar.bz2 |
| 37 | +$ tar jxf php-7.0.0alpha1.tar.bz2 |
| 38 | +$ cd php-7.0.0alpha1 |
| 39 | +
|
| 40 | +$ ./configure |
| 41 | +... ... |
| 42 | +checking size of long... (cached) 8 |
| 43 | +checking size of long long... (cached) 8 |
| 44 | +checking for iconv support... yes |
| 45 | +checking for iconv... no |
| 46 | +checking for libiconv... no |
| 47 | +configure: error: Please specify the install prefix of iconv with --with-iconv=<DIR> |
| 48 | +
|
| 49 | +``` |
| 50 | + |
| 51 | +安装 libiconv (字符编码转换库) |
| 52 | +网站地址: http://www.gnu.org/software/libiconv/ |
| 53 | +当前版本: http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz |
| 54 | + |
| 55 | +``` |
| 56 | +$ wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz |
| 57 | +$ tar zxf libiconv-1.14.tar.gz |
| 58 | +$ cd libiconv-1.14 |
| 59 | +$ ./configure --prefix=/usr/local/lib/libiconv |
| 60 | +$ make |
| 61 | +$ sudo make install |
| 62 | +``` |
| 63 | + |
| 64 | + |
| 65 | +配置参数 |
| 66 | +``` |
| 67 | +$ ./configure --prefix=/usr/local/php7 \ |
| 68 | +--enable-fpm \ |
| 69 | +--with-config-file-path=/usr/local/php7/etc \ |
| 70 | +--with-iconv=/usr/local/lib/libiconv \ |
| 71 | +
|
| 72 | +执行configure配置后,可以看到有如下结果: |
| 73 | +... ... |
| 74 | +Thank you for using PHP. |
| 75 | +
|
| 76 | +config.status: creating php7.spec |
| 77 | +config.status: creating main/build-defs.h |
| 78 | +config.status: creating scripts/phpize |
| 79 | +config.status: creating scripts/man1/phpize.1 |
| 80 | +config.status: creating scripts/php-config |
| 81 | +config.status: creating scripts/man1/php-config.1 |
| 82 | +config.status: creating sapi/cli/php.1 |
| 83 | +config.status: creating sapi/cgi/php-cgi.1 |
| 84 | +config.status: creating ext/phar/phar.1 |
| 85 | +config.status: creating ext/phar/phar.phar.1 |
| 86 | +config.status: creating main/php_config.h |
| 87 | +config.status: executing default commands |
| 88 | +WangTomdeMacBook-Pro:php-7.0.0alpha1 wangtom$ |
| 89 | +``` |
| 90 | +$ make |
| 91 | +$ make test |
| 92 | +$ sudo make install |
| 93 | + |
| 94 | +查看PHP7是否安装成功 |
| 95 | +```` |
| 96 | +WangTomdeMacBook-Pro:php-7.0.0alpha1 wangtom$ /usr/local/php7/bin/php -v |
| 97 | +PHP 7.0.0alpha1 (cli) (built: Jun 20 2015 00:04:19) |
| 98 | +Copyright (c) 1997-2015 The PHP Group |
| 99 | +Zend Engine v3.0.0-dev, Copyright (c) 1998-2015 Zend Technologies |
| 100 | +
|
| 101 | +Mac-mini:~ WangTom$ sudo ln -s /usr/local/php7/bin/php /usr/bin/php7 |
| 102 | +
|
| 103 | +Mac-mini:~ WangTom$ php -v |
| 104 | +PHP 5.5.20 (cli) (built: Feb 25 2015 23:30:53) |
| 105 | +Copyright (c) 1997-2014 The PHP Group |
| 106 | +Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies |
| 107 | +
|
| 108 | +Mac-mini:~ WangTom$ php7 -v |
| 109 | +PHP 7.0.0alpha1 (cli) (built: Jun 23 2015 17:24:34) |
| 110 | +Copyright (c) 1997-2015 The PHP Group |
| 111 | +Zend Engine v3.0.0-dev, Copyright (c) 1998-2015 Zend Technologies |
| 112 | +
|
| 113 | +Mac-mini:php-fpm.d WangTom$ which php |
| 114 | +/usr/bin/php |
| 115 | +Mac-mini:php-fpm.d WangTom$ which php7 |
| 116 | +/usr/bin/php7 |
| 117 | +``` |
| 118 | +
|
| 119 | +### 配置PHP-FPM: |
| 120 | +
|
| 121 | +Nginx不支持对外部程序的直接调用或者解析,所有的外部程序(包括PHP)必须通过FastCGI接口来调用。 |
| 122 | +PHP-FPM是一个PHP FastCGI管理器,新版的PHP已经集成了php-fpm,在./configure的时候带 –enable-fpm参数即可开启PHP-FPM. |
| 123 | +FPM (FastCGI Process Manager) is an alternative PHP FastCGI implementation with some additional features (mostly) useful for heavy-loaded sites. |
| 124 | +
|
| 125 | +启动 PHP-FPM: |
| 126 | +``` |
| 127 | +Mac-mini:php7 WangTom$ /usr/local/php7/sbin/php-fpm |
| 128 | +[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. |
| 129 | +[23-Jun-2015 15:33:01] ERROR: failed to open error_log (/usr/local/php7/var/log/php-fpm.log): Permission denied (13) |
| 130 | +[23-Jun-2015 15:33:01] ERROR: failed to post process the configuration |
| 131 | +[23-Jun-2015 15:33:01] ERROR: FPM initialization failed |
| 132 | +``` |
| 133 | +提示错误说/usr/local/php7/var/log/php-fpm.log 没权限,就给777权限: |
| 134 | +$ chmod 777 /usr/local/php7/var/log/ |
| 135 | +
|
| 136 | +修改 php-fpm 配置文件: |
| 137 | +$ cd /usr/local/php7/etc/ |
| 138 | +$ cp php-fpm.conf.default php-fpm.conf |
| 139 | +$ vim php-fpm.conf |
| 140 | + > 打开 error_log这一行的注释,默认该项被注释掉,若不修改会出现提示log文件路径不存在 |
| 141 | + > error_log = /usr/local/php7/var/log/php-fpm.log |
| 142 | + > 打开inclue这一行的注释 |
| 143 | + > include=/usr/local/php7/etc/php-fpm.d/*.conf |
| 144 | +
|
| 145 | +修改 /usr/local/php7/etc/php-fpm.d/www.conf 文件: |
| 146 | +如果这个文件不存在,就从default复制一份: |
| 147 | +$ cd /usr/local/php7/etc/php-fpm.d/ |
| 148 | +$ cp www.conf.default www.conf |
| 149 | +将配置文件中的 user 和 group 部分的 nobody 改成 www: |
| 150 | +$ vim /usr/local/php7/etc/php-fpm.d/www.conf |
| 151 | + > user = www |
| 152 | + > group = www |
| 153 | +
|
| 154 | +开始启动 php-fpm: |
| 155 | +``` |
| 156 | +Mac-mini:php-7.0.0alpha1 WangTom$ /usr/local/php7/sbin/php-fpm |
| 157 | +[23-Jun-2015 18:30:48] NOTICE: [pool www] 'user' directive is ignored when FPM is not running as root |
| 158 | +[23-Jun-2015 18:30:48] NOTICE: [pool www] 'group' directive is ignored when FPM is not running as root |
| 159 | +[23-Jun-2015 18:30:48] ERROR: unable to bind listening socket for address '127.0.0.1:9000': Address already in use (48) |
| 160 | +[23-Jun-2015 18:30:48] ERROR: FPM initialization failed |
| 161 | +``` |
| 162 | +这个错误问题有两个:(1)没有使用root账户执行启动命令 (2)端口9000被占用 |
| 163 | +解决方法: |
| 164 | +使用root账户执行php-fpm启动,或 sudo /usr/local/php7/sbin/php-fpm |
| 165 | +关闭 PHP-fpm, 并重新启动: |
| 166 | +``` |
| 167 | +Mac-mini:~ WangTom$ lsof -P | grep ':9000' | awk '{print $2}' | xargs kill -9 |
| 168 | +Mac-mini:php-7.0.0alpha1 WangTom$ /usr/local/php7/sbin/php-fpm -t |
| 169 | +[23-Jun-2015 18:30:25] NOTICE: configuration file /usr/local/php7/etc/php-fpm.conf test is successful |
| 170 | +Mac-mini:~ WangTom$ sudo /usr/local/php7/sbin/php-fpm |
| 171 | +Mac-mini:~ WangTom$ |
| 172 | +``` |
| 173 | +
|
| 174 | +修改Nginx 配置: |
| 175 | +在 nginx.conf 配置文件server 部分增加fastcgi配置,并重新加载配置文件: |
| 176 | +``` |
| 177 | +Mac-mini:~ WangTom$ sudo vim /usr/local/nginx/conf/nginx.conf |
| 178 | +
|
| 179 | +> location ~ \.php$ { |
| 180 | +> root html; |
| 181 | +> fastcgi_pass 127.0.0.1:9000; |
| 182 | +> fastcgi_index index.php; |
| 183 | +> fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; |
| 184 | +> include fastcgi_params; |
| 185 | +> } |
| 186 | +
|
| 187 | +Mac-mini:~ WangTom$ sudo /usr/local/nginx/sbin/nginx -t |
| 188 | +nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok |
| 189 | +nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful |
| 190 | +Mac-mini:~ WangTom$ sudo /usr/local/nginx/sbin/nginx -s reload |
| 191 | +Mac-mini:~ WangTom$ |
| 192 | +``` |
| 193 | +
|
| 194 | +用到的一些命令: |
| 195 | +
|
| 196 | +uname: 用来获取电脑和操作系统的相关信息 |
| 197 | +sw_vers: Mac下查看系统版本信息 |
| 198 | +lsof: 列出当前系统打开文件(list open files) |
| 199 | +which: 指令会在环境变量$PATH设置的目录里查找符合条件的文件 |
| 200 | +
|
| 201 | +
|
| 202 | +参考链接: |
| 203 | +
|
| 204 | +- http://php.net/archive/2015.php#id2015-06-11-3 |
| 205 | +- http://www.hashbangcode.com/blog/compiling-and-installing-php7-ubuntu |
| 206 | +
|
| 207 | +
|
| 208 | +[END] |
0 commit comments