设为首页 收藏本站
查看: 1067|回复: 0

[经验分享] php配置——php.ini配置文件详解

[复制链接]

尚未签到

发表于 2018-12-14 12:35:45 | 显示全部楼层 |阅读模式
  查找PHP配置文件
  ① 命令行(不推荐,服务器有多个php,httpd不一定加载的此模块)
  [root@wy ~]# /usr/local/php/bin/php -i | grep 'Loaded Configuration'
  Loaded Configuration File => /usr/local/php/etc/php.ini
  ② 调用php函数(推荐使用,精确)
  [root@wy ~]# vim /data/www/phpinfo.php
  

  禁掉一些危险的函数
  ## 编辑配置文件,查找到disable_functions
  [root@wy ~]# vim /usr/local/php/etc/php.ini
  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
  解释说明:
  配置disable_functions;
  exec,shell_exec这两个函数是调用linux命令非常危险必须禁用;
  有时候也会禁止phpinfo函数;
  #重启apache,再刷新网页可看到禁掉的函数
  [root@wy ~]# /usr/local/apache2/bin/apachectl restart

  配置PHP错误日志
  ## 关闭此选项,如果PHP代码有错,将不会提示错误信息直接显示白页
  [root@wy ~]# vim /usr/local/php/etc/php.ini
  display_errors = Off/On        ## 默认Off
  解释说明:
  虽然开启便于程序调试,但***获取到这些错误可能会发起***,不安全;
  ## 确认开启
  log_errors = On
  ## 配置错误日志
  error_log = /usr/local/php/logs/php_errors.log
  解释说明:
  配置的错误日志目录必须存在(mkdir /usr/local/php/logs)且必须写绝对路径
  chown -R daemon.daemon /usr/local/php/logs/  或者chmod 777 /usr/local/php/logs(因为生成错误日志的用户是apache,所以要有写权限)
  ## 日志级别
  error_reporting = E_ALL & ~E_NOTICE
  解释说明:
  设置日志级别就是在过滤错误日志记录呢些内容;
  E_ALL 包含所有的错误和警告(且包含了PHP5.4版本中的E_STRICT);
  E_NOTICE 把所有的错误都显示,除了通知和代码的标准警告;
  & 并且;
  | 或者;
  ~ 取反;
  是指 E_ALL 为真,或者 非E_NOTICE 为真;
  ## 为了测试,故意php文件写错
  [root@wy ~]# cat /data/www/phpinfo.php
  
  ## 检查并重新加载
  [root@wy ~]# /usr/local/apache2/bin/apachectl -t
  Syntax OK
  [root@wy ~]# /usr/local/apache2/bin/apachectl graceful
  ## 解析并查看生成的错误日志
  [root@wy ~]# /usr/local/php/bin/php /data/www/phpinfo.php
  [root@wy ~]# tail /usr/local/php/logs/php_errors.log
  [06-Nov-2016 04:53:30 Asia/Chongqing] PHP Parse error:  syntax error, unexpected T_STRING in /data/www/phpinfo.php on line 3
  配置open_basedir
  也是一个安全选项,它有什么意义呢,举个例子,咱们这个php,apache它要去访问一个网站,它要找到
  一个路径,我们有给它定义一个路径,比如说/data/www,那这个时候如果,假设这个你的环境,你的网站
  有一些漏洞,让不法分子获得了一些权限,他可以上传一个他自己的***,那他这个***呢可以获得你服务
  器上的一些信息,比如可以获得一些目录、一些文件,可以查看,那这个时候呢,我们应该想到一个策略,
  为了以防万一,我们应该把它限制死在某一个目录下,因为我们网站在/data/www下,那我们就应该给它
  限定死,你只能访问/data/www这个目录,其他的目录(比如根目录、etc目录),你是不可以查看的,如何
  去做呢
  ## 编辑配置文件
  [root@wy ~]# vim /usr/local/php/etc/php.ini
  open_basedir = /data/www/:/tmp/
  解释说明:
  /tmp/  一般都会用到,就写上
  ## 不过为了测试,故意写错受限制路径(就出现了500错误)
  open_basedir = /data/www1/:/tmp/
  ## apache重新加载
  [root@wy ~]# /usr/local/apache2/bin/apachectl graceful
  ## 访问网页测试

  ## 命令行测试
  [root@wy ~]# curl -xlocalhost:80 www.test.com/phpinfo.php -I    
  HTTP/1.0 500 Internal Server Error
  Date: Sat, 05 Nov 2016 21:23:53 GMT
  Server: Apache/2.2.16 (Unix) DAV/2 PHP/5.3.28
  X-Powered-By: PHP/5.3.28
  Cache-Control: max-age=0
  Expires: Sat, 05 Nov 2016 21:23:53 GMT
  Connection: close
  Content-Type: text/html
  X-Pad: avoid browser bug
  ## 查看日志
  [root@wy ~]# /usr/local/php/bin/php /data/www/forum.php    ## 解析
  [root@wy ~]# tail /usr/local/php/logs/php_errors.log
  [06-Nov-2016 05:30:41 Asia/Chongqing] PHP Warning:  require(): open_basedir restriction in effect. File(./source/class/class_core.php) is not within the allowed path(s): (/data/www1/:/tmp/) in /data/www/forum.php on line 15
  [06-Nov-2016 05:30:41 Asia/Chongqing] PHP Warning:  require(./source/class/class_core.php): failed to open stream: Operation not permitted in /data/www/forum.php on line 15
  [06-Nov-2016 05:30:41 Asia/Chongqing] PHP Fatal error:  require(): Failed opening required './source/class/class_core.php' (include_path='.:/usr/local/php/lib/php') in /data/www/forum.php on line 15
  备注:访问网页后,错误日志没有生成,我又自己解析的,这才出来错误日志。
  其实在apache里同样可以定义,假如说我们现在有多个虚拟主机,多个网站,多个网站你就应该去做多个
  open_basedir的限制,如果用php.ini去做,只能配置一句;你要是限定多个目录的话,不同的站点你是
  没有办法区分开的,所以我们可以针对apache的虚拟主机去做一些限制,每一个虚拟主机(VirtualHost)使用一个open_basedir(好处在于我们可以区分不同的虚拟主机),如何去配置?那先把php.ini的open_basedir先注释掉(注:php里;来作为注释),然后做下面的实验。
  ## 配置apache虚拟主机的open_basedir
  [root@wy ~]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
  
      DocumentRoot "/data/tmp"
      ServerName tmp.com
      php_admin_value open_basedir "/tmp/tmp/"
  
  
      DocumentRoot "/data/www"
      ServerName www.test.com
      ServerAlias www.aaa.com
      ServerAlias www.bbb.com
      php_admin_value open_basedir "/data/www/:/tmp/"
  
  解释说明:
  在open_basedir时,一定要将目录/dir/(后面的/一定要加上)否则会包含www、www1、www2......
  ## 检查并重新加载
  [root@wy ~]# /usr/local/apache2/bin/apachectl -t
  Syntax OK
  [root@wy ~]# /usr/local/apache2/bin/apachectl graceful
  





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-651356-1-1.html 上篇帖子: PHP判断远程图片或文件或url是否存在 下篇帖子: php配置——扩展模块如何安装
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表