在尝试使用php访问时,我只在单个.csv文件上看到了奇怪的Ubuntu权限问题。该文件是list.csv,由ubuntu拥有:www-data,ubuntu用户是www-data组的一部分。网站的其余部分工作正常,没有权限问题,但我在尝试使用php加载此文件时看到以下错误:
PHP Fatal error: Uncaught exception 'RuntimeException' with message 'SplFileObject::__construct(xxx/list.csv): failed to open stream: Permission denied'
如果我知道www-data:www-data list.csv,我可以用php加载。如果由ubuntu拥有,为什么这个文件没有被php加载,即使ubuntu是www-data组的一部分?
此外,我可以在ubuntu用户(vi list.csv)读写时打开此文件。
编辑:文件的权限是:-rwxr-xr-x 1 ubuntu www-data
再次编辑:将权限更改为0644 -rw-r - r-- 1 ubuntu www-data no luck
进行更多编辑:文件位于具有x权限的目录中: drwxr-xr-x 3 ubuntu www-data 4096 7月28日23:09内容/
不确定它与执行权限有什么关系,因为我可以将所有者更改为www-data:www-data并加载文件。这似乎与用户ubuntu拥有该文件而不是www-data
有关编辑:这行代码出错,试图将.csv文件加载到php SplFileObject中:
SplFileObject::__construct("xxx/content/list.csv");
答案 0 :(得分:1)
我可以在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')
答案 1 :(得分:0)
您的服务器可能设置了PHP open_basedir
参数,这会阻止访问此目录之外的任何文件。
要验证这一点,请查看相关的php.ini文件(例如/etc/php5/apache2/php.ini)并检查是否设置了open_basedir
行。