Разрешения установлены на 777 и файл все еще не доступен для записи

Я установил права доступа к файлам 777, но я не могу записать в файл с PHP.

Я могу четко видеть в своем FTP-клиенте, что у файла есть разрешения 0777, и когда я это делаю:

echo (true === is_writable('file.txt')) ? 'yes' : 'no'; 

Я получаю «нет»;

Я также пробовал:

 echo (true === chmod('file.txt', 0777)) ? 'yes' : 'no'; 

С тем же результатом.

Список каталогов выглядит примерно так:

 public_html public 0777 css 0755 js 0755 file.txt 0777 

И я использую файл .htaccess для перенаправления всего трафика на общедоступную вложенную папку. Конечно, я исключил файл из перезаписи (он доступен из браузера, который я проверил):

 RewriteRule ^(file).* - [L] 

Почему это?

Я думаю, Apache работает как другой пользователь / группа, чем пользователь / группа, владеющая файлом. В этом случае сам файл должен быть 0777 .

public должен быть только 0777 если вы планируете добавлять файлы в папку с помощью PHP. Даже если сама папка не 0777 , если файл и папка имеет не менее 5 для пользователя ( read/execute ), вы должны иметь возможность записать в файл.

В конце концов, ваше дерево файлов должно выглядеть так:

 public_html public file.txt 0777 

Естественно, вы не сможете изменить эти разрешения с помощью PHP, но вы можете сделать это с вашего FTP-клиента.

Если он все еще не работает, PHP может работать в безопасном режиме, или вы можете использовать расширение, такое как PHP Suhosin. Вы можете получить лучший результат, изменив владельца файла на тот же пользователь / группу, на которой запущен скрипт.

Чтобы получить идентификатор пользователя / группы исполняемого пользователя, вы можете использовать следующее:

 <?php echo getmyuid().':'.getmygid(); //ex:. 0:0 ?> 

Затем вы можете использовать chown (в терминале), чтобы изменить владельца файла:

 > chown 0:0 file.txt 

В opencart я столкнулся с этой ошибкой после установки vqmod и предоставления всех необходимых разрешений.

после исследования немного, нашел его.

«MODS CACHE PATH NOT WRITEABLE» на самом деле ссылается на папку vqmod, а не на папку кэша.

 sudo chmod -R 777 vqmod 

в корневом каталоге …..

Вы должны chmod файл сразу после его создания.

 function Doo_Chmod($path, $chmod = null) { if (file_exists($path) === true) { if (is_null($chmod) === true) { $chmod = (is_file($path) === true) ? 644 : 755; if (in_array(get_current_user(), array('apache', 'httpd', 'nobody', 'system', 'webdaemon', 'www', 'www-data')) === true) { $chmod += 22; } } return chmod($path, octdec(intval($chmod))); } return false; }