open_basedir php文件包含目录配置

open_basedir将PHP所能打开的文件限定在制定的目录树中,包括其文件本身,当使用这些fopen,file_put_contents()打开一个文件,这个文件的文件的位置会被检查,如果文件在其指定的目录树之外,程序将会被拒绝打开。

错误如下:

Warning: file_get_contents(): open_basedir restriction in effect. File(../test.txt) is not within the allowed path(s): (/home/fdipzone/sites/in.fdipzone.com/) in /home/fdipzone/sites/in.fdipzone.com/index.php on line 3

通过查看crontab定时命令(grep 'index.php' /var/log/cron)

un 14 21:14:01 bogon CROND[4542]: (han) CMD (/home/wwwroot/index.php)
Jun 14 21:14:01 bogon CROND[4541]: (han) CMDOUT (/bin/sh: /home/wwwroot/index.php: 权限不够)
Jun 14 21:16:01 bogon CROND[4659]: (han) CMD (/home/wwwroot/index.php)
Jun 14 21:16:01 bogon CROND[4658]: (han) CMDOUT (/bin/sh: /home/wwwroot/index.php: 权限不够)
Jun 14 21:18:01 bogon CROND[4711]: (han) CMD (/home/wwwroot/index.php)

 open_basedir限定的其实是前缀而不是目录,也就是说“open_basedir = /dir/incl”也会允许访问“/dir/include”和“/dir/incls”,如果它们存在的话。
如果要将访问限制在仅为指定的目录,用斜线结束路径名。例如:“open_basedir = /dir/incl/”。)

接下来总结下, 可以有几种方式设置限制包含目录

1)php.ini open_basedir = /home/wwwroot/
2)ini_set 注意:PHP >5.2.3+ PHP_INI_ALL ,不建议使用,这么设置太随意了。
3)apache 的 httpd.conf 中Directory配置

"php_admin_value open_basedir none" #关闭 
php_admin_value open_basedir "/home/wwwroot/:/tmp/:/var/tmp/:/proc/"

httpd.conf中VirtualHost

php_admin_value open_basedir "/home/wwwroot/:/tmp/:/var/tmp/:/proc/"

4)nginx fastcgi.conf
fastcgi_param  PHP_VALUE  "open_basedir=$document_root:/tmp/";

5).user.ini 文件
设置方法同 1 .
[root@bogon default]# cat .user.ini 
open_basedir=/home/wwwroot/default:/tmp/:/proc/

drwxrwxrwx.  3 han  www    138 6月  14 23:41 .
drwxrwxrwx.  3 han  root    38 6月  14 21:43 ..
-rwxrwxrwx.  1 han  root  2781 6月  11 21:27 index.html
-rwxrwxrwx.  1 han  root  5683 6月  11 21:27 lnmp.gif
-rwxrwxrwx.  1 han  root 20256 6月  11 21:27 ocp.php
-rwxrwxrwx.  1 han  root    20 6月  11 21:27 phpinfo.php
drwxrwxrwx. 14 han  www   4096 6月  11 21:27 phpmyadmin
-rwxrwxrwx.  1 han  root 42609 6月  11 21:27 p.php
-rw-rw-r--   1 han  han     67 6月  14 21:52 test.php
-rw-r--r--.  1 root root    48 6月  11 21:27 .user.ini

此时给文件赋不上权限的,chmod -R 777 是无效的

[root@bogon wwwroot]# chmod -R 777 default/
chmod: 更改"default/.user.ini" 的权限: 不允许的操作
[root@bogon wwwroot]#    


因为文件被锁定,所以要解除锁定,在删除
[root@bogon default]# rm .user.ini 
rm:是否删除普通文件 ".user.ini"?y
rm: 无法删除".user.ini": 不允许的操作
[root@bogon default]# chattr -i /home/wwwroot/default/.user.ini 


原文地址:https://www.cnblogs.com/hanshuai0921/p/7011336.html