PHP配置
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
配置若有遗漏或错误,请评论留言。