温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

php配置——php.ini配置文件详解

发布时间:2020-04-15 05:34:53 来源:网络 阅读:811 作者:warm51cto 栏目:web开发

查找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

<?php

    phpinfo();

?>

php配置——php.ini配置文件详解

禁掉一些危险的函数

## 编辑配置文件,查找到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.ini配置文件详解

配置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

<?php

phpinfo();

e cho "ni hao 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

## 访问网页测试

php配置——php.ini配置文件详解

## 命令行测试

[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

<VirtualHost *:80>

   DocumentRoot "/data/tmp"

   ServerName tmp.com

  php_admin_value open_basedir "/tmp/tmp/"

</VirtualHost>

<VirtualHost *:80>

   DocumentRoot "/data/www"

   ServerName www.test.com

   ServerAlias www.aaa.com

   ServerAlias www.bbb.com

   php_admin_value open_basedir "/data/www/:/tmp/"

</VirtualHost>

解释说明:

在open_basedir时,一定要将目录/dir/(后面的/一定要加上)否则会包含www、www1、www2......

## 检查并重新加载

[root@wy ~]# /usr/local/apache2/bin/apachectl -t

Syntax OK

[root@wy ~]# /usr/local/apache2/bin/apachectl graceful


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI