编译安装php
多赚钱,离傻逼们远一点
Apache
先从官方网站下载php7,并且解压
1
2wget http://am1.php.net/get/php-7.0.0.tar.gz/from/this/mirror
tar zvxf php-7.0.0.tar.gz# cd php-7.0.0接下来要进行编译前的配置,需要提供apxs参数
1
/configure --prefix=/usr/local/php7 \--with-config-file-path=/usr/local/php7/etc \--with-config-file-scan-dir=/usr/local/php7/etc/php.d \--with-apxs2=/usr/local/apache/bin/apxs \--with-mcrypt=/usr/include \--enable-mysqlnd \--with-mysqli \--with-pdo-mysql \--with-gd \--with-iconv \--with-zlib \--enable-xml \--enable-shmop \--enable-sysvsem \--enable-inline-optimization \--enable-mbregex \--enable-mbstring \--enable-ftp \--enable-gd-native-ttf \--with-openssl \--enable-pcntl \--enable-sockets \--with-xmlrpc \--enable-zip \--enable-soap \--without-pear \--with-gettext \--enable-session \--with-curl \--with-jpeg-dir \--with-freetype-dir \--enable-opcache
注意配置
--prefix
安装文件位置,--with-config-file-path
配置文件位置,--with-apxs2
整合apache,编译
1
2make
make install配置apache
如果上面的编译安装正常,由于我们配置了apxs选项,所以在编译的时候,make会对apache的apxs进行调用操作,结果就是在apache的安装目录下的modules目录下生成libphp7.so,并在apache的配置文件httpd.conf中增加一行1
2
3
4
5LoadModule php7_module modules/libphp7.so
```一看就明白了,就是让apache去加载一个新的libphp7.so模块。但是我们仍然要对`httpd.conf`进行修改,重新配置apache。找到LoadModule php,你会发现,竟然出现了两行LoadModule,同时加载了php5和php7,如下:
```php
LoadModule php5_module modules/libphp5.so
LoadModule php7_module modules/libphp7.so我们把第一行给注释掉,而且还要增加一个PHPIniDir的配置项,即修改为如下:
1
2
3#LoadModule php5_module modules/libphp5.so
LoadModule php7_module modules/libphp7.so
PHPIniDir /usr/local/php7/etc重启apache,现在可以写一个phpinfo去试试看了。
或者这样修改配置文件1
2
3Apache不认识xxx.php后缀
打开Apache配置文件,增加
AddType application/x-httpd-php .php
Nginx
先从官方网站下载php7,并且解压
1
2wget http://am1.php.net/get/php-7.0.0.tar.gz/from/this/mirror
tar zvxf php-7.0.0.tar.gz# cd php-7.0.0接下来要进行编译前的配置,我们不提供apxs参数,我们提供php-fpm相关参数
1
# ./configure --prefix=/usr/local/php7 \--with-config-file-path=/usr/local/php7/etc \--with-config-file-scan-dir=/usr/local/php7/etc/php.d \--with-mcrypt=/usr/include \--enable-mysqlnd \--with-mysqli \--with-pdo-mysql \--enable-fpm \--with-fpm-user=nginx \--with-fpm-group=nginx \--with-gd \--with-iconv \--with-zlib \--enable-xml \--enable-shmop \--enable-sysvsem \--enable-inline-optimization \--enable-mbregex \--enable-mbstring \--enable-ftp \--enable-gd-native-ttf \--with-openssl \--enable-pcntl \--enable-sockets \--with-xmlrpc \--enable-zip \--enable-soap \--without-pear \--with-gettext \--enable-session \--with-curl \--with-jpeg-dir \--with-freetype-dir \--enable-opcache
配置无误后执行
1
2make
make install调整php配置
默认安装好之后,你会发现/usr/local/php7/etc下面没有php.ini文件,这个去哪里要呢?在php7的源码安装包都有。1
2
3
4cd /usr/src/php-7.0.0/# ls
```可以看到有两个php.ini-xxx文件,我们可以分别vi打开来看下,一个是产品模式,一个是开发模式。
```php
cp php.ini-production /usr/local/php7/etc/php.ini# vi /usr/local/php7/etc/php.ini启用php-fpm服务
上面我们在编译php7的时候,已经将fpm模块编译了,那么接下来,我们要启用php-fpm。但是默认情况下它的配置文件和服务都没有启用,所以要我们自己来搞定。
搞定配置文件:1
2
3cd /usr/local/php7/etc
mv php-fpm.conf.default php-fpm.conf
mv php-fpm.d/www.conf.defualt php-fpm.d/www.confphp-fpm的服务载入
我们希望使用service php-fpm start|stop|restart这些操作来实现服务的重启,但没有像nginx那么复杂,php编译好之后,给我们提供了一个php-fpm的程序,不需要我再编写分享了。这个文件放在php编译源码目录中:1
2
3
4
5
6cd /usr/src/php-7.0.0/sapi/fpm
ls
cp init.d.php-fpm /etc/init.d/php-fpm
chmod +x /etc/init.d/php-fpm
chkconfig --add php-fpm#
chkconfig php-fpm on通过上面这个操作,我们就可以使用
1
sevice php-fpm start
来启用php-fpm了。用
1
ps -ef | grep php-fpm
看看进程吧。
查看php版本
1
2
3./bin/php -v
nginx代理php实现访问
php-fpm走的是127.0.0.1:9000,外网是无法访问的,而且我们也不可能直接通过php-fpm给外网提供服务,我们用nginx去代理9000端口执行php。
我们需要在nginx的配置文件中增加代理的规则,即可让用户在访问80端口,请求php的时候,交由后端的fpm去执行,并返回结果。1
vi /usr/local/nginx/conf/nginx.conf
那么怎么代理php-fpm呢?
1
2
3
4
5
6
7location ~ \.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;
}这样就OK了,重新载入nginx配置即可
1
service nginx reload