我正在尝试用 PHP 读取一个文件,但我收到了权限被拒绝的错误,尽管每个人都可以读取该文件。
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 [...]
文件系统权限:
有一个符号链接(symbolic link)指向 /opt/jenkins/home/
到 /var/lib/jenkins
并且每个人都对符号链接(symbolic link)、实际文件夹和文件具有读取权限.
$ 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 配置
配置为遵循符号链接(symbolic link)(Options All
)。为 /var/lib/jenkins/
添加一个 Directory
指令没有任何区别。
<Directory /opt/jenkins/home/>
Options All
AllowOverride All
Order Allow,Deny
Allow from All
</Directory>
附加信息
我是通过符号链接(symbolic link)使用路径 ("/opt/jenkins/home/config.xml"
) 还是使用真实路径 ("/var/lib/jenkins/config.xml) xml"
) 我有同样的问题。
apache2 version=2.2.14-5ubuntu8.4
php version=5.3.2-1ubuntu4.9
知道我为什么会收到错误吗?
最佳答案
您的目录需要execute
权限才能工作。它似乎没有执行 world,并且由于 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
权限,如果目录没有执行权限,读取其内容将被拒绝。
您需要为目标目录和符号链接(symbolic link)设置权限。
关于php - 尽管使用 PHP 具有适当的权限,但权限被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6941282/