LAMP配置防盗链 访问控制Directory FilesMatch 禁止php解析 PHP相关配置 PHP扩展模块安装

1、配置防盗链

防止有人利用网站文件上传的功能,把一些静态媒体资源放到我们的网站上,然后在他们的网站上设置这些资源的链接到我们的网站上,当他们网站用户访问这些资源时,就会跳转到我们的服务器上,导致我们的服务器带宽流量异常增大。为了防止这种情况发生,我们利用apache服务器访问控制实现防盗链功能

  • 打开虚拟主机配置文件
vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
  • 需要添加的配置文件
<Directory /data/wwwroot/111.com>  //用于定义作用于哪个目录,配置防盗链,就是定义本站点
SetEnvIfNoCase Referer "http://www.111.com" local_ref   //指定referer白名单
SetEnvIfNoCase Referer "http://111.com" local_ref   //指定referer白名单
SetEnvIfNoCase Referer "^$" local_ref   //空的referer也能访问
<FilesMatch "\.(txt|doc|mp3|zip|rar|jpg|gif)">   //使用文件匹配访问控制,这里的filesmatch中f 和 m 可以大写可以小写
Order Allow,Deny    //访问控制顺序,先允许后拒绝。
Allow from env=local_ref   //只有符合白名单上的referer才能访问111.com目录。
</FilesMatch>
</Directory>
  • 更改后的配置文件,并将空的Referer页面为白名单 注释掉:改为# SetEnvIfNoCase Referer "^$" local_ref

  • 检查配置文件是否有语法错误,并重新加载配置文件

[root@aminglinux ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@aminglinux ~]# /usr/local/apache2.4/bin/apachectl graceful
  • curl测试
  • curl -e 格式:curl -e "http://"

curl -e "http://www.aminglinux.com/123.html" 自定义referer

2、访问控制Directory

公司的内部网站可以设置访问控制,指定来源IP才能够访问

  • 核心配置文件内容
<Directory /data/wwwroot/111.com/admin/>
    Order deny,allow
    Deny from all
    Allow from 127.0.0.1
</Directory>
  • 打开虚拟主机配置文件
vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
  • Order,用来定义顺序,是先deny,还是allow
  • 若是先deny,就先执行deny的语句
  • 若是先allow,就先执行allow的语句

特殊性:

  • 不管IP是否匹配到,它都会从头到尾执行完
将代码放在防盗链代码上面,防止冲突
<Directory /data/wwwroot/111.com>   // 指定需要访问控制的网站的目录
Order deny,allow   //访问控制的顺序,先所有都拒绝,然后再允许指定的ip。和iptables不同,可以全部规则都执行下去。
Deny from all   // 拒绝所有的来源ip
Allow from 127.0.0.1 //指定允许访问的来源ip(指定网段也可以192.168.0.0/24)
</Directory>
  • 创建一个admin目录,并新建一个index.php文件,内容为121212
[root@aminglinux 111.com]# mkdir admin
[root@aminglinux 111.com]# cd admin/
[root@aminglinux admin]# touch index.php
[root@aminglinux admin]# echo "121212">index.php
[root@aminglinux admin]# cat index.php
121212
  • 检查配置文件是否有语法错误,并重新加载配置文件
[root@aminglinux ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@aminglinux ~]# /usr/local/apache2.4/bin/apachectl graceful

限制的原 IP:curl -x127.0.0.1:80 111.com/admin/index.php -I

  • 127.0.0.1是目标 IP ,而要访问的IP,也要使用127.0.0.1去访问,最终就是目标IP和原IP是同一个IP,自己和自己通信,限制IP是 原 IP
  • -x指定的是目标IP
[root@aminglinux admin]# curl -x127.0.0.1:80 111.com/admin/index.php -I
HTTP/1.1 200 OK
Date: Sat, 30 Jun 2018 03:30:13 GMT
Server: Apache/2.4.29 (Unix) PHP/5.6.30
X-Powered-By: PHP/5.6.30
Cache-Control: max-age=0
Expires: Sat, 30 Jun 2018 03:30:13 GMT
Content-Type: text/html; charset=UTF-8
  • curl测试状态码为403则被限制访问了;

更改IP测试:

[root@aminglinux admin]# curl -x192.168.222.110:80 111.com/admin/index.php -I
HTTP/1.1 403 Forbidden
Date: Sat, 30 Jun 2018 03:34:11 GMT
Server: Apache/2.4.29 (Unix) PHP/5.6.30
Content-Type: text/html; charset=iso-8859-1
  • 访问控制是用目录的形式来做的,首先规定一个目录访问到哪里去的(目录必须使用绝对路径),然后是Oerder,控制的对象就是来源IP

3、访问控制 FilesMatch

访问控制,除了目录形式,还是文件名去匹配(或链接)

核心配置文件内容

<Directory /data/wwwroot/www.123.com>
    <FilesMatch "admin.php(.*)">
        Order deny,allow
        Deny from all
        Allow from 127.0.0.1
    </FilesMatch>
</Directory>
  • 打开虚拟主机配置文件
vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
  • 首先定义一个Directory,然后在下面在定义一个FilesMatch
<FilesMatch "admin.php(.*)">   //指定需要访问控制的页面
Order deny,allow     //访问控制的顺序,先所有都拒绝,然后再允许指定的ip
Deny from all          // 拒绝所有的来源ip
Allow from 127.0.0.1  //指定允许访问的来源ip(指定网段也可以192.168.0.0/24)
</FilesMatch>
  • 检查配置文件是否有语法错误,并重新加载配置文件
[root@aminglinux ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@aminglinux ~]# /usr/local/apache2.4/bin/apachectl graceful

测试

这里没有对admin目录做任何限制,做的FilesMatch跟这个不匹配,没有遇到控制语句,所以访问是404
[root@aminglinux admin]# curl -x192.168.222.110:80 111.com/admin/fasdfasdf -I
HTTP/1.1 404 Not Found
Date: Sat, 30 Jun 2018 04:08:20 GMT
Server: Apache/2.4.29 (Unix) PHP/5.6.30
Content-Type: text/html; charset=iso-8859-1

有特殊符号需要用 '单引号括起来
[root@aminglinux admin]# curl -x192.168.222.110:80 'http://111.com/admin.php?fasdfasdf' -I
HTTP/1.1 403 Forbidden
Date: Sat, 30 Jun 2018 04:09:13 GMT
Server: Apache/2.4.29 (Unix) PHP/5.6.30
Content-Type: text/html; charset=iso-8859-1

[root@aminglinux admin]# curl -x127.0.0.1:80 'http://111.com/admin.php?fasdfasdf' -I
HTTP/1.1 404 Not Found
Date: Sat, 30 Jun 2018 04:09:28 GMT
Server: Apache/2.4.29 (Unix) PHP/5.6.30
Content-Type: text/html; charset=iso-8859-1

总结: Directory和FilesMatch 功能是一样的,只不过有时仅仅想针对一个访问的链接去做控制,那么再去控制目录则不太合适,FilesMatch可以满足一些比较个性化的需求

4、禁止php解析

应用于对静态文件目录或可写的目录进行优化设置,通过限制解析/访问权限来避免别恶意攻击,提高安全性.

编辑虚拟主机配置文件:

vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

 <Directory /data/wwwroot/111.com/upload>
         ##把upload目录下所有的php禁止解析
        php_admin_flag engine off        //禁止解析php
        <FilesMatch (.*)\.php(.*)>        //现在这里所有访问php都会是403
        ##这里的 .用\脱义
        Order allow,deny                //如果不做这个deny,就会直接访问到源代码,这样就不太好
        Deny from all
        </FilesMatch>
  • 检查配置文件是否有语法错误,并重新加载配置文件
[root@aminglinux ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@aminglinux ~]# /usr/local/apache2.4/bin/apachectl graceful
  • 创建upload目录,新建php文件
[root@aminglinux 111.com]# mkdir upload
[root@aminglinux 111.com]# cp 123.php upload/
[root@aminglinux 111.com]# ls upload/
123.php

测试

[root@aminglinux 111.com]# curl -x127.0.0.1:80 '111.com/upload/123.php' -I
HTTP/1.1 403 Forbidden
Date: Sat, 30 Jun 2018 11:39:46 GMT
Server: Apache/2.4.29 (Unix) PHP/5.6.30
Content-Type: text/html; charset=iso-8859-1
  • 禁止php解析操作,其实就是为了服务器更加安全,特别是针对可以写的目录
  • 可写的目录,一般是不需要解析php,这个需要牢记,一般静态文件存放的目录是不允许解析php 的

5、限制user_agent

user_agent可以理解为浏览器标识,限制他可以防止CC攻击(用软件或者肉鸡)

  • 配置文件
<IfModule mod_rewrite.c>  
  ReWriteEngin on    
  ReWriteCond  %{HTTP_USER_AGENT} .*curl+[NC,OR]  
  ReWriteCond  %{HTTP_USER_AGENT} .*baidu.com.* [NC]   
  ReWriteRule .* -[F]   
</IfModule>

编辑虚拟主机配置文件:

vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<IfModule mod_rewrite.c>  //使用rewrite模块
  ReWriteEngin on    //打开模块
  ReWriteCond  %{HTTP_USER_AGENT} .*curl+[NC,OR]  //定义条件 [NC]忽略大小写,[OR] 两个条件或匹配
  ReWriteCond  %{HTTP_USER_AGENT} .*baidu.com.* [NC]   //定义条件
  ReWriteRule .* -[F]   //定义规则,[F] 是禁止。
</IfModule>
  • 检查配置文件是否有语法错误,并重新加载配置文件
[root@aminglinux ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@aminglinux ~]# /usr/local/apache2.4/bin/apachectl graceful

验证: [root@aminglinux 111.com]# curl -A “abcde” -x127.0.0.1:80 '111.com/123.php'

curl命令

curl命令是一个利用URL规则在命令行下工作的文件传输工具

  • -A ,指定user-agent,设置用户代理发送给服务器
  • -e ,指定referer,就是来源网址
  • -I ,仅仅查看它的状态码
  • -x ,在指定的端口上使用HTTP代理

6、PHP相关配置

查看php配置文件位置

  • /usr/local/php/bin/php -i|grep -i "loaded configuration file"
  • date.timezone
  • disable_functions eval,assert,popen,passthru,escapeshellarg,escapeshellcmd,passthru,exec,system,chroot,scandir,chgrp,chown,escapeshellcmd,escapeshellarg,shell_exec,proc_get_status,ini_alter,ini_restore,dl,pfsockopen,openlog,syslog,readlink,symlink,leak,popepassthru,stream_socket_server,popen,proc_open,proc_close
  • error_log, log_errors, display_errors, error_reporting
  • open_basedir
  • php_admin_value open_basedir "/data/wwwroot/111.com:/tmp/"

查看php配置文件的位置

  • 通过浏览器,访问phpinfo找到配置文件的路径
  • 也可以用/usr/local/php/bin/php -i |grep -i “loaded configuration file”找到他的路径;但是有些情况“php -i ”是不准的,因为Apache他是调用了php 的一模块,而且“php -i” 只是php 的一个程序,它和libphp5.so可能有关系也可能没有关系
  • 有时改了php.ini,改动了也重启了服务,结果配置还是不生效;因为使用“php -i” 找到的配置文件和在web上的phpinfo找到的php.ini不是同一个,如果想要准确的找到php.ini配置文件,就在对应的站点目录下,创建一个phpinfo的php文件,在web上打开,在phpinfo上找到的,才是最准确的
[root@aminglinux 111.com]# cd /usr/local/src/php-7.1.6/
[root@aminglinux php-7.1.6]# cp php.ini-development /usr/local/php7/etc/php.ini
[root@aminglinux php-7.1.6]# /usr/local/apache2.4/bin/apachectl graceful

设置PHP文件

  • 打开PHP文件,禁掉一些危险的函数
[root@aminglinux php-7.1.6]# vim /usr/local/php7/etc/php.ini

搜索 /disabledisable_functions =后禁掉一些危险的函数

disable_functions = eval,assert,popen,passthru,escapeshellarg,escapeshellcmd,passthru,exec,system,chroot,scandir,chgrp,chown,escapeshellcmd,escapeshellarg,shell_exec,proc_get_status,ini_alter,ini_restore,dl,pfsockopen,openlog,syslog,readlink,symlink,leak,popepassthru,stream_socket_server,popen,proc_open,proc_close,phpinfo

重新加载配置文件

root@aminglinux php-7.1.6]# /usr/local/apache2.4/bin/apachectl graceful

打开php配置文件

定义date.timezone时区,如果不定义,有时候会有一些告警信息 display_errors = On,(On显示,Off不显示),这个意思就会把错误的信息直接显示在浏览器上,这样就会把目录给暴露出来,所以这里更改成display_errors = Off

[root@aminglinux php-7.1.6]# vim /usr/local/php7/etc/php.ini
搜索/timezone
在date.timezone定义时区
需要删除 ; 分号
date.timezone = Asia/Shanghai

搜索/display
需要删除 ; 分号
将display_errors = On更改为display_errors = Off
  • 检查配置文件是否有语法错误,并重新加载配置文件
[root@aminglinux ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@aminglinux ~]# /usr/local/apache2.4/bin/apachectl graceful

配置错误日志

  • 打开配置文件 vim /usr/local/php7/etc/php.ini
  • 定义错误日志log_errors = On——>on表示打开
  • 定义错误日志文件路径error_log= /tmp/php_errors.log
  • error_reporting = E_ALL定义日志的级别,默认是ALL,表示把所有的errors都记录下来,这是最不严谨的
  • 在生产环境中,使用; E_ALL & ~E_NOTICE (Show all errors, except for notices)
搜索/log_errors,将错误日志文件打开
log_errors = On

搜索/error_log,将错误日志文件定义到tmp目录下
需要删除 ; 分号
error_log = /tmp/php_errors.log
  • 检查配置文件是否有语法错误,并重新加载配置文件
[root@aminglinux ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@aminglinux ~]# /usr/local/apache2.4/bin/apachectl graceful
  • 再去访问一遍,会看到tmp目录下生成了php_errors.log
[root@aminglinux php-7.1.6]# curl -A "a" -x127.0.0.1:80 http://111.com/index.php
[root@aminglinux php-7.1.6]# ls /tmp/
mysql.sock      systemd-private-84395be6ac6e40bfad6b9456aa2e32d3-chronyd.service-kz6jjS
pear            systemd-private-84395be6ac6e40bfad6b9456aa2e32d3-vgauthd.service-pM2iTz
php_errors.log  systemd-private-84395be6ac6e40bfad6b9456aa2e32d3-vmtoolsd.service-cXzXg9
[root@aminglinux php-7.1.6]#
  • 查看php_errors.log文件,会看到属主属组是daemon [root@aminglinux php-7.1.6]# ll /tmp/php_errors.log -rw-r--r-- 1 daemon daemon 282 7月 1 01:16 /tmp/php_errors.log
  • daemon实际上是httpd的属主,php_errors.log日志文件是以httpd这个进程的身份去生成的
[root@aminglinux php-7.1.6]# ps aux |grep httpd
root      1422  0.0  1.4 257488 14356 ?        Ss   630   0:05 /usr/local/apache2.4/bin/httpd -k start
daemon    3629  0.0  1.7 611964 17484 ?        Sl   01:16   0:00 /usr/local/apache2.4/bin/httpd -k start
daemon    3630  0.0  1.3 544316 13176 ?        Sl   01:16   0:00 /usr/local/apache2.4/bin/httpd -k start
daemon    3631  0.0  1.5 611964 15488 ?        Sl   01:16   0:00 /usr/local/apache2.4/bin/httpd -k start
root      3725  0.0  0.0 112720   984 pts/0    S+   01:20   0:00 grep --color=auto httpd
[root@aminglinux php-7.1.6]#
  • 有时候,定义了一个错误日志,但是这个错误日志始终没有生成,那么就需要检查一下定义错误日志所在的目录,到底httpd有没有写权限
  • 最保险的办法,就是在所在目录创建一个错误日志的文件,然后赋予它777的权限,这样就不需要担心这个文件httpd是否有写权限了
[root@aminglinux php-7.1.6]# grep error_log /usr/local/php7/etc/php.ini 
; server-specific log, STDERR, or a location specified by the error_log
; Set maximum length of log_errors. In error_log information about the source is
error_log = /tmp/php_errors.log
;error_log = syslog
; OPcache error_log file name. Empty string assumes "stderr".
;opcache.error_log=

[root@aminglinux php-7.1.6]# touch /tmp/php_errors.log ; chmod 777 /tmp/php_errors.log 

- 可以先创建好/tmp/php_errors.log文件,然后赋予chmod 777权限

查看文件日志

[root@aminglinux php-7.1.6]# cat /tmp/php_errors.log //会告诉你因为安全的原因,这个函数已经被禁掉了
[30-Jun-2018 17:16:27 UTC] PHP Warning:  phpinfo() has been disabled for security reasons in /usr/local/apache2.4/htdocs/index.php on line 2
[30-Jun-2018 17:16:32 UTC] PHP Warning:  phpinfo() has been disabled for security reasons in /usr/local/apache2.4/htdocs/index.php on line 2

安全相关的参数

  • 一台服务器上,运行了多个站点,有一台服务器假如代码有问题,结果这个站点被黑客攻击了,被黑客拿到了权限,黑客拿了权限肯定会继续往里渗透,继续往里渗透,就会有可能渗透到其他的站点,同时导致其他的站点被黑

  • open_basedir,它是一个安全选项,限制不能串岗

  • php.ini文件中的内容是针对所有虚拟主机进行的配置!!!

  • 打开配置文件 vim /usr/local/php7/etc/php.ini

[root@aminglinux php-7.1.6]# vim /usr/local/php7/etc/php.ini
搜索/open_basedir,并上删除 ; 号
open_basedir = /data/wwwroot/111.com:/tmp
  • 检查配置文件是否有语法错误,并重新加载配置文件
[root@aminglinux ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@aminglinux ~]# /usr/local/apache2.4/bin/apachectl graceful

再来访问,会显示正常

  • 若是服务器上跑了N多个站点,那应该怎么去做限制呢?
  • 应该针对站点,这些网站去做open_basedir ,但php.ini是做不到的,因为php.ini是针对所有站点的
  • 但我们可以在虚拟主机配置文件中设置,在apache虚拟主机配置文件中去设置/usr/local/apache2.4/conf/extra/httpd-vhosts.conf
  • 在这里可以针对不同虚拟主机限制不同的open_basedi
[root@aminglinux php-7.1.6]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
php_admin_value open_basedir "/data/wwwroot/111.com:/tmp/" 添加open_basedir
  • 检查配置文件是否有语法错误,并重新加载配置文件
[root@aminglinux ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@aminglinux ~]# /usr/local/apache2.4/bin/apachectl graceful

7、PHP扩展模块安装

  • /usr/local/php/bin/php -m //查看模块
  • 下面安装一个redis的模块
  • cd /usr/local/src/
  • wget https://codeload.github.com/phpredis/phpredis/zip/develop
  • mv develop phpredis-develop.zip
  • unzip phpredis-develop.zip
  • cd phpredis-develop
  • /usr/local/php/bin/phpize //生成configure文件
  • ./configure --with-php-config=/usr/local/php/bin/php-config
  • make && make install
  • /usr/local/php/bin/php -i |grep extension_dir //查看扩展模块存放目录,我们可以在php.ini中去自定义该路径
  • vim /usr/local/php/etc/php.ini //增加一行配置(可以放到文件最后一行)
  • extension = redis.so

在php安装编译完成后,这时候发现缺少了一个模块,但又无法重新编译php模块,那就使用扩展模块编译

  • 查看模块
  • 下载redis包:redis模块,在lamp通常用作缓存
[root@aminglinux php-7.1.6]# cd /usr/local/src
[root@aminglinux src]# wget https://codeload.github.com/phpredis/phpredis/zip/develop
--2018-07-01 01:57:20--  https://codeload.github.com/phpredis/phpredis/zip/develop
正在解析主机 codeload.github.com (codeload.github.com)... 13.229.189.0, 13.250.162.133, 54.251.140.56
正在连接 codeload.github.com (codeload.github.com)|13.229.189.0|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:未指定 [application/zip]
正在保存至: “develop”

    [                       <=>                             ] 239,183     16.8KB/s 用时 13s    

2018-07-01 01:57:37 (17.9 KB/s) - “develop” 已保存 [239183]

[root@aminglinux src]#

更改包的名称

[root@aminglinux src]# mv develop phpredis-develop.zip
[root@aminglinux src]# ls
apr-1.6.3               httpd-2.4.29.tar.gz                           php-7.1.6
apr-1.6.3.tar.gz        mariadb-10.2.6-linux-glibc_214-x86_64.tar.gz  php-7.1.6.tar.bz2
apr-util-1.6.1          mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz     phpredis-develop.zip
apr-util-1.6.1.tar.bz2  php-5.6.30
httpd-2.4.29            php-5.6.30.tar.gz

解压,查看解压包

[root@aminglinux src]# unzip phpredis-develop.zip
root@aminglinux src]# ls
apr-1.6.3               httpd-2.4.29.tar.gz                           php-7.1.6
apr-1.6.3.tar.gz        mariadb-10.2.6-linux-glibc_214-x86_64.tar.gz  php-7.1.6.tar.bz2
apr-util-1.6.1          mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz     phpredis-develop
apr-util-1.6.1.tar.bz2  php-5.6.30                                    phpredis-develop.zip
httpd-2.4.29            php-5.6.30.tar.gz

切换到phpredis-develop包下面

[root@aminglinux src]# cd phpredis-develop/
[root@aminglinux phpredis-develop]#

编译方法有些特殊,需要先做phpize的操作,目的是为了生成configure文件——>因为编译一个源码包,必须要先有configure,否则是无法去配置的

[root@aminglinux phpredis-develop]# /usr/local/php7/bin/phpize //生成configure文件
Configuring for:
PHP Api Version:         20160303
Zend Module Api No:      20160303
Zend Extension Api No:   320160303
Cannot find autoconf. Please check your autoconf installation and the
$PHP_AUTOCONF environment variable. Then, rerun this script.
  • 报错:缺少autoconf包
  • 解决办法:yum install -y autoconf
[root@aminglinux phpredis-develop]# yum install -y autoconf

然后再去生成configure文件

[root@aminglinux phpredis-develop]# /usr/local/php7/bin/phpize
Configuring for:
PHP Api Version:         20160303
Zend Module Api No:      20160303
Zend Extension Api No:   320160303
  • 然后再去配置./configure --with-php-config=/usr/local/php7/bin/php-config
[root@aminglinux phpredis-develop]#./configure --with-php-config=/usr/local/php7/bin/php-config
  • make然后再make install
[root@aminglinux phpredis-develop]#make
[root@aminglinux phpredis-develop]#make install
Installing shared extensions:     /usr/local/php7/lib/php/extensions/no-debug-zts-20160303/
  • ls 查看下,会看到生成了 redis.so 文件,就是我们需要的扩展模块
[root@aminglinux phpredis-develop]# ls /usr/local/php7/lib/php/extensions/no-debug-zts-20160303/opcache.so  redis.so
  • 现在php还是不支持 redis模块的,可以grep查看下,会看到并没有 redis模块
  • 所以需要去配置下,加载redis模块,去编辑配置文件
  • 配置文件前,先去查看扩展模块存放目录
  • /usr/local/php7/bin/php -i |grep extension_dir //查看扩展模块存放目录,我们可以在php.ini中去自定义该路径
  • 所有的扩展模块,都会默认放到/usr/local/php7/lib/php/extensions/no-debug-zts-20160303下去
[root@aminglinux phpredis-develop]# /usr/local/php7/bin/php -m |grep redis
[root@aminglinux phpredis-develop]# /usr/local/php7/bin/php -i |grep extension_dir
extension_dir => /usr/local/php7/lib/php/extensions/no-debug-zts-20160303 => /usr/local/php7/lib/php/extensions/no-debug-zts-20160303
sqlite3.extension_dir => no value => no value
  • 编辑php.ini文件,增加一行配置
[root@aminglinux phpredis-develop]# vim /usr/local/php7/etc/php.ini
可以将配置的一行放在文件最后面,也可以搜索/extension,放到相关的下面
extension = redis.so

查看是否有redis模块,会看到已经加载了

[root@aminglinux phpredis-develop]# /usr/local/php7/bin/php -m |grep redis
redis

另外一种方法快速安装redis.so模块 /usr/local/php7/bin/pecl install redis

[root@aminglinux phpredis-develop]# /usr/local/php7/bin/pecl install redis
  • 如果你想编译一个模块,而且他自带的源码包目录/usr/local/src/php-7.1.6/ext 下有,那么只需要进行以下一些步骤,就可以完成扩展模块新增
  1. 在你需要增加的拓展模块的目录下执行 /usr/local/php7/bin/phpize ,生成一个configure 文件
  2. 执行 ./configure –with-php-config=/usr/local/php7/bin/php-config 配置php-config文件
  3. 开始编译 make
  4. 编译后移动到目录 make install
  5. 修改配置文件vim /usr/local/php7/etc/php.ini ,新增所需extension=xxxxxxx.so 拓展模块

关于扩展板块

  • 在PHP的源码包中没有第三方模块的包,但是在PHP源码包的/ext/目录下有好多扩展模块,如果所需要的扩展模块在该目录下,可以直接进行安装
  • 在源码包中安装模块,在php的源码包中,有一个ext目录,这个目录下有很多的模块
[root@aminglinux phpredis-develop]# cd /usr/local/src/php-7.1.6/ext/
[root@aminglinux ext]# ls
bcmath      ext_skel            interbase  opcache       pdo_sqlite  skeleton  tokenizer
bz2         ext_skel_win32.php  intl       openssl       pgsql       snmp      wddx
calendar    fileinfo            json       pcntl         phar        soap      xml
com_dotnet  filter              ldap       pcre          posix       sockets   xmlreader
ctype       ftp                 libxml     pdo           pspell      spl       xmlrpc
curl        gd                  mbstring   pdo_dblib     readline    sqlite3   xmlwriter
date        gettext             mcrypt     pdo_firebird  recode      standard  xsl
dba         gmp                 mysqli     pdo_mysql     reflection  sysvmsg   zip
dom         hash                mysqlnd    pdo_oci       session     sysvsem   zlib
enchant     iconv               oci8       pdo_odbc      shmop       sysvshm
exif        imap

增加zip扩展模块

编译zip模块进入到zip目录下,并查看

[root@aminglinux ext]# /usr/local/php7/bin/php -m |grep zip
[root@aminglinux ext]# cd zip/
[root@aminglinux zip]# ls
config.m4   CREDITS   lib             php_zip.c  tests  zip_stream.c
config.w32  examples  LICENSE_libzip  php_zip.h  TODO
  • 然后执行/usr/local/php7/bin/phpize命令,目的是生成configure文件
[root@aminglinux zip]# /usr/local/php7/bin/phpize
Configuring for:
PHP Api Version:         20160303
Zend Module Api No:      20160303
Zend Extension Api No:   320160303
  • 配置./configure --with-php-config=/usr/local/php7/bin/php-config
  • 然后make
  • 再去make install
[root@aminglinux zip]#./configure --with-php-config=/usr/local/php7/bin/php-config
[root@aminglinux zip]#make
[root@aminglinux zip]# make install
Installing shared extensions:     /usr/local/php7/lib/php/extensions/no-debug-zts-20160303/
[root@aminglinux zip]#

再去查看会看到zip模块的出现

[root@aminglinux zip]# ls /usr/local/php7/lib/php/extensions/no-debug-zts-20160303/
opcache.so  redis.so  zip.so

猜你喜欢

转载自blog.csdn.net/xou6363/article/details/80871672