php - 尽管使用 PHP 具有适当的权限,但权限被拒绝

标签 php apache file permissions

我正在尝试用 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/bar0777 权限,如果目录没有执行权限,读取其内容将被拒绝。

您需要为目标目录和符号链接(symbolic link)设置权限。

关于php - 尽管使用 PHP 具有适当的权限,但权限被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6941282/

相关文章:

php - 404 错误 laravel 4 路由

Windows 7 64 位 xampp 上的 phpredis

java - 如何对非常大的文件进行排序

php - 使用 Google Calendar API (PHP) 插入包含非 ASCII 字符的事件

php - 显示来自 blob mysql 的图像

php - 使用 session 时在 xampp 上可能导致 ERR_CONNECTION_RESET 错误的原因

c++ - C++ 服务的 mod_gsoap 错误

apache - 在 IIS 中使用 Solr

php - mysql查询中使用目录函数

c++ - 如何使用行号读取文件行内容