我试图用
PHP读取一个文件,但是我收到一个权限被拒绝的错误,尽管每个人都有对该文件的读取权限.
$config=file_get_contents('/opt/jenkins/home/config.xml');
错误:
Warning: file_get_contents(/opt/jenkins/home/config.xml): Failed to open stream: Permission denied in [...]
文件系统权限:
有一个符号链接指向/ opt / jenkins / home /到/ var / lib / jenkins,每个人都有对符号链接,实际文件夹和文件的读取权限.
$ls -lh /opt/jenkins/ lrwxrwxrwx 1 sysadmin sysadmin 16 2011-08-04 08:12 home -> /var/lib/jenkins $ls -lh /var/lib/ | grep jenkins drwxr-xr-- 6 jenkins adm 4.0K 2011-08-04 10:04 jenkins $ls -lh /var/lib/jenkins/config.xml -rwxr-xr-- 1 jenkins adm 3.9K 2011-08-04 10:05 /var/lib/jenkins/config.xml
Apache配置
配置为以下符号链接(选项全部).添加/ var / lib / jenkins /的目录指令没有区别.
<Directory /opt/jenkins/home/> Options All AllowOverride All Order Allow,Deny Allow from All </Directory>
附加信息
我是否使用通过符号链接的路径(“/opt/jenkins/home/config.xml”)或实际路径(“/var/lib/jenkins/config.xml”)我也有同样的问题.
apache2 version=2.2.14-5ubuntu8.4 PHP version=5.3.2-1ubuntu4.9
任何想法为什么我得到错误?
您的目录需要执行权限才能使其工作.它似乎没有世界执行,由于jenkins可能不是apache用户,并且apache用户不在adm组中,它将无法正常工作:
$ls -lh /var/lib/ | grep jenkins drwxr-xr-- 6 jenkins adm 4.0K 2011-08-04 10:04 jenkins
每个例子:
netcoder@netcoder:~$mkdir foo netcoder@netcoder:~$echo hello > foo/bar netcoder@netcoder:~$chmod 777 foo/bar netcoder@netcoder:~$ls -lsah foo/bar 4.0K -rwxrwxrwx 1 netcoder netcoder 6 2011-08-04 08:22 foo/bar netcoder@netcoder:~$chmod 444 foo/ netcoder@netcoder:~$ls -lsah | grep foo 4.0K dr--r--r-- 2 netcoder netcoder 4.0K 2011-08-04 08:22 foo netcoder@netcoder:~$cat foo/bar cat: foo/bar: Permission denied
即使foo / bar有0777权限,如果该目录没有执行权限,则读取其内容即被拒绝.
您将需要为目标目录和符号链接设置权限.