PHP配置

目录

1.PHP 的 disable_functions

2.配置error_log

3.配置open_basedir

4.PHP动态扩展模块安装

PHP配置

# /usr/local/php/bin/php -i |grep -i "loaded configuration file"    
PHP Warning:    //一行警告
Loaded Configuration File => /usr/local/php/etc/php.ini     //PHP配置文件的位置
php.ini为PHP的配置文件/usr/local/php/etc/php.ini,取消上面的警告,编辑php.ini,找到date.timezone:
date.timezone = Asia/Shanghai
再次执行不在提示警告信息

1.PHP 的 disable_functions

PHP有很多函数,有一些函数(比如exec)会直接调用Linux系统命令,如果开放会非常危险。

基于安全考虑拔一下存在安全风险的函数禁掉:

# vim /usr/local/php/etc/php.ini    //搜索disable_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

若将来遇到问题记得你曾经禁用了一些函数,这些被禁掉的函数是不能在PHP代码中调用的。更改完php.ini后,由于需要在httpd中调用PHP,所以需要重启htppd服务使其生效。

2.配置error_log

设置错误日志

# vim /usr/local/php/etc/php.ini
//搜索log_errors,改为
log_errors = On
​
//搜索error_log
error_log = /var/log/php/php/errors.log
​
//搜索error_reporting,改为
error_reporting =E_ALL & ~E_NOTICE  //E_ALL所有类型的日志(提示和警告)&并且~排除notice
​
//搜索display_errors,改
display_errors = Off

 

额外操作:

# mkdir /var/log/php
# chmod 777 /var/log/php
# /usrlocal/php/apache2.4/bin/apachectl gracectl

测试:

# vim /data/wwwroot/www.abc.com/test.php //写入不完整的代码
<?php
echo 111
# Curl -A "123" -I -x127.0.0.1:80 www.abc.com/test.php
//500 Internal Server Error
# cat /var/log/php/php_errors.log
...
//通过日志判断,test.php文件第三行缺少代码

3.配置open_basedir

将网站限制在指定的目录里,该站点被黑是不会影响其他站点

服务器只有一个站点,可直接在php.ini中设置open_basedir参数(只能定义一次)

# vim /usr/local/php/etc/php.ini
open_basedir = /tmp:/data/wwwroot/abc.com
//可以写多个目录,用:分隔

测试:

# /usr/local/apache2.4/bin/apachectl graceful
# cp /usr/local/apache2.4/htdocs/1.php /data/wwwroot/123.com/
# curl -x127.0.0.1:80 -I 123.com/1.php
//500 Internal Server error 不能访问

 

多个站点给单个虚拟主机设置open_basedir,对于php.ini里面的配置,在httpd.conf中也是可以设置的:

# vim /usr/local/apache2.4/conf/extra/httpd-vhost.conf
# vim /usr/lcoal/apache2.4/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
    DocumentRoot "/data/wwwroot/abc.com"
    ServerName www.abc.com
    ServerAlias abc.com
    CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/abc.com-access_%Y%m%d.log 86400" combined
    php_admin_value open_basedir "/data/wwwroot/abc.com/:/tmp/"
</VirtualHost>

//php_admin_value可以定义php.ini里面的参数,除此之外像error_log之类的也可以定义。

4.PHP动态扩展模块安装

# /usr/local/php/bin/php -m     //查看模块
​
安装PHP的redis扩展模块
# cd /usr/local/src
# wget https://codeload.github.com/phpredis/phpredis/zip/develop
//若地址失效请到r.aminglinux.com找最新的下载地址
# mv develop phpredis-develop.zip
# unzip !$
# cd phpredis-develop/
# /usr/local/php/bin/phpize //目的是生成configure文件
Configuring for:
PHP Api Version:            20131106
Zend Module Api No:         20131226
Zend Extension Api No:      220131226
Cannot find zutoconf. Please check your autoconf installation and the $PHP_AUTOCONF environment variable. Then, rerun this script.
//可以看到上面有一个错误cannot find autoconf,这需要安装一些autoconf
​
# yum install -y autoconf
# /usr/local/php/bin/phpize //再次执行
# ./configure --with-php-config=/usr/local/php/bin/php-config
# make
# make install
Installing shared extensions:   /usr/local/php/lib/php/extensions/no-debug-zts-20131226/
// make install的时候会把编译好的redis.so放到这个目录下面,这个目录也是扩展模块存放到目录
# /usr/local/php/bin/php -i |grep extension_dir //查看扩展模块存放目录,我们可以在                                                  //php.ini中自定义该目录
# ls /usr/local/php/lib/php/extensions/no-debug-zts-20131226/   
                                                    //可以看到redis.so模
# vim /usr/local/php/etc/php.ini //增加一行配置(可放到最好)
extension = redis.so
# /usr/local/php/bin/php -m |grep redis //查看是否加载了Redis模块
redis

 

出处:《跟阿铭学Linux》

posted @ 2021-02-21 19:53  破碎的屋檐  阅读(49)  评论(0编辑  收藏  举报