在尝试使用php访问时,我只在一个.csv文件上看到奇怪的Ubuntu权限问题。该文件是list.csv,由ubuntu:www数据所有,而ubuntu用户是www数据组的一部分。网站的其余部分运行良好,没有权限问题,但我在尝试用php加载此文件时看到以下错误:
PHP Fatal error: Uncaught exception 'RuntimeException' with message 'SplFileObject::__construct(xxx/list.csv): failed to open stream: Permission denied'
如果我选择www数据:www数据列表.csv,我可以用php加载。如果ubuntu拥有这个文件,为什么php不加载这个文件,即使ubuntu是www数据组的一部分?
此外,我可以以ubuntu用户(vi list.csv)的身份读写打开这个文件。
编辑:文件的权限是:-rwxr-xr-x 1 ubuntu www数据
再次编辑:将权限更改为0644-rw-r-1 ubuntu www数据无运气
编辑更多内容:文件位于具有x权限的目录中:drwxr-xr-x 3 ubuntu www数据4096 7月28日23:09内容/
不确定它是否与执行权限有关,因为我可以将所有者更改为www数据:www数据,然后加载文件。这似乎与用户ubuntu拥有文件而不是www数据有关
编辑:这行代码出错了,试图将.csv文件加载到php-SplFileObject:中
SplFileObject::__construct("xxx/content/list.csv");
我可以在OP中看到,所有者和组之间的唯一区别是write
权限(您已经在组中尝试过xr
和r
)。因此,我怀疑您的PHP
正试图以write
模式打开该文件。
要确认此尝试:
$myCSV = new SplFileInfo('YOUR CSV');
$myCSV->isReadable(); // should be true
$myCSV->isWritable(); //expecting this to be false
编辑:如果你的程序就是这样,你可以使用$myCSV->openFile('r')
在读取模式下打开文件
您的服务器可能设置了PHP open_basedir
参数,这将阻止访问该目录之外的任何文件。
要验证这一点,请查看相关的php.ini文件(例如/etc/php5/apache2/php.ini),并检查是否设置了open_basedir
行。