11.30-11.32 PHP配置,PHP模块安装
php.ini文件基本配置
可以写一个页面,内容如下:
<?php
phpinfo();
?>
用这种方式可以找到php.ini文件应该放置的位置。也可以看到其是否已经加载。然后到php的src中寻找配置文件复制到此目录。
Configuration File (php.ini) Path /usr/local/php7/etc //查找其应该所在的位置
Loaded Configuration File /usr/local/php7/etc/php.ini
[root@cent01 php-7.1.6]# cp /usr/local/src//php-7.1.6/php.ini-development /usr/local/php7/etc/php.ini //复制php.ini文件到其应该在的位置
[root@cent01 php-7.1.6]# vim /usr/local/php7/etc/php.ini //编辑配置文件
timezone=Asia/Shanghai //设置时区
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函数,因为这条函数会暴露系统的信息带来一定风险
error_log //值设为on
log_errors //值设为/tmp/php_errors.log
error_reporting //值设为E_ALL & E_NOTICE
display_errors // 值设为off,因为这条信息是显示在客户端浏览器上的。这会暴露系统信息
[root@cent01 php-7.1.6]# /usr/local/apache2.4/bin/apachectl -t
[root@cent01 php-7.1.6]# /usr/local/apache2.4/bin/apachectl graceful //重新加载配置文件
[root@cent01 php-7.1.6]# cat /tmp/php_errors.log //查看错误日志
[13-Nov-2017 22:25:05 Asia/Shanghai] PHP Warning: phpinfo() has been disabled for security reasons in /data/wwwroot/111.com/1.php on line 2
[13-Nov-2017 22:30:15 Asia/Shanghai] PHP Parse error: syntax error, unexpected end of file in /data/wwwroot/111.com/2.php on line 4
[13-Nov-2017 22:30:20 Asia/Shanghai] PHP Parse error: syntax error, unexpected end of file in /data/wwwroot/111.com/2.php on line 4
open_basedir
有时候会在一个服务器上跑多个网站,为了确保一个网站被黑时不会导致另一个网站也被黑,这时可以用open_basedir设置来管理。
虽然可以在php.ini文件中设置,但是在这里设备并不适用于一台服务器上有多个网站时。所以还有更好的方法是在httpd-vhost文件上进行设置。
//在php.ini文件中设置
[root@cent01 php-7.1.6]# vim /usr/local/php7/etc/php.ini //编辑配置文件
open_basedir =/data/wwwroot/111.com/:/tmp/ //两个目录用:隔开
[root@cent01 php-7.1.6]# /usr/local/apache2.4/bin/apachectl -t
[root@cent01 php-7.1.6]# /usr/local/apache2.4/bin/apachectl graceful //重新加载配置文件
//在httpd-vhost文件中设置
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/abc.com"
ServerName abc.com
ServerAlias www.abc.com www.123.com
ErrorLog "logs/abc.com-error_log"
php_admin_value open_basedir "/data/wwwroot/111.com/:/tmp/" //语句为php_admin_value
CustomLog "logs/abc.com-access_log" combined
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/111.com"
ServerName 111.com
ServerAlias www.example.com 111.com
php_admin_value open_basedir "/data/wwwroot/111.com/:/tmp/"
ErrorLog "logs/111.com-error_log"
CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/111.com-access_%Y%m%d.log 86400 " combined
</VirtualHost>
php动态模块安装
php一旦编译完成后,如果想添加新的模块,要么重新编译php,要么编译一个扩展模块(so文件),然后在php.ini中配置一下,就可以被加载使用了。
/usr/local/php/bin/php -m //查看已经加载了哪些模块
举例安装php redis模块:
[root@cent01 php-7.1.6]# cd /usr/local/src
[root@cent01 src]# wget https://codeload.github.com/phpredis/phpredis/zip/develop
[root@cent01 src]# mv develop phpredis-develop.zip
[root@cent01 src]# unzip phpredis-develop.zip
[root@cent01 src]# cd phpredis-develop/
[root@cent01 phpredis-develop]# ls //没有看到configure文件
arrays.markdown config.m4 debian library.h README.markdown redis.c redis_session.c
cluster_library.c config.w32 debian.control m
[root@cent01 phpredis-develop]# yum install -y autoconf
[root@cent01 phpredis-develop]# /usr/local/php7/bin/phpize //用php自带的phpize生成configure文件
Configuring for:
PHP Api Version: 20160303
Zend Module Api No: 20160303
Zend Extension Api No: 320160303
[root@cent01 phpredis-develop]# ls //configure文件出现了
acinclude.m4 common.h COPYING library.c package.xml redis_cluster.c serialize.list
aclocal.m4 config.guess crc16.h library.h php_redis.h redis_cluster.h tests configure
[root@cent01 phpredis-develop]# ./configure --with-php-config=/usr/local/php7/bin/php-config //编译
[root@cent01 phpredis-develop]# make&&make install
Installing shared extensions: //显示生成的redis.so文件的存放目录
/usr/local/php7/lib/php/extensions/no-debug-zts-20160303/
[root@cent01 phpredis-develop]# ls //确实有redis.so文件/usr/local/php7/lib/php/extensions/no-debug-zts-20160303/
opcache.so redis.so
[root@cent01 phpredis-develop]# vim /usr/local/php7/etc/php.ini //编辑配置文件,搜索extension,添加extension=redis.so
[root@cent01 phpredis-develop]# /usr/local/php7/bin/php -m //可以看到redis.so已经被调用了
[PHP Modules]
bz2
ctype
redis
//各种设置完成后,重启httpd就可以使用了
[root@cent01 phpredis-develop]# /usr/local/apache2.4/bin/apachectl restart