fopen() не удается открыть поток: в разрешении отказано, но разрешения должны быть действительными


Итак, у меня есть эта ошибка:

Warning: fopen(/path/to/test-in.txt) [function.fopen]: failed to open stream: Permission denied

Выполнение ls -l в каталоге, в котором находится test-in.txt, приводит к следующему результату:

-rw-r--r-- 1 $USER $USER 1921 Sep  6 20:09 test-in.txt
-rw-r--r-- 1 $USER $USER    0 Sep  6 20:08 test-out.txt

Чтобы преодолеть это, я решил выполнить следующее:

chgrp -R www-data /path/to/php/webroot

А затем сделал:

chmod g+rw /path/to/php/webroot

Тем не менее, я все еще получаю эту ошибку, когда запускаю свой скрипт php5 для открытия файла. Почему это происходит? Я пробовал это с помощью LAMP, а также cherokee через CGI, так что это не может быть так.

Существует ли решение некоторых сортировать?

Редактировать

Я также добавлю, что сейчас я просто развиваюсь через localhost.

Обновление - строка PHP fopen()

$fullpath = $this->fileRoot . $this->fileInData['fileName'];

$file_ptr = fopen( $fullpath, 'r+' );

Я также должен упомянуть, что хотел бы остаться с Чероки, если это возможно. Что это за сделка по настройке прав доступа к файлам для Apache/Cherokee?

Author: j0k, 2012-09-07

2 answers

Проверьте, имеет ли пользователь, под которым работает PHP, разрешение "X" для каждого каталога пути к файлу.
Он понадобится ему для доступа к файлу

Если ваш файл: /path/to/test-in.txt
У вас должно быть разрешение X на:

  • /path
  • /path/to

И разрешение на чтение на /path/to/test-in.txt

 7
Author: Izack, 2012-09-07 05:05:58

Другой причиной этой ошибки может быть то, что каталог файла не существует.

Я просто добавляю php-код перед открытием:

if(!file_exists(dirname($file))) 
    mkdir(dirname($file));

Это мне помогает.

 2
Author: onebraveman, 2016-02-16 09:46:52