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?
2 answers
Проверьте, имеет ли пользователь, под которым работает PHP, разрешение "X" для каждого каталога пути к файлу.
Он понадобится ему для доступа к файлу
Если ваш файл: /path/to/test-in.txt
У вас должно быть разрешение X на:
/path
/path/to
И разрешение на чтение на /path/to/test-in.txt
Другой причиной этой ошибки может быть то, что каталог файла не существует.
Я просто добавляю php-код перед открытием:
if(!file_exists(dirname($file)))
mkdir(dirname($file));
Это мне помогает.