Разрешения установлены на 777, и файл все еще не доступен для записи - PullRequest
4 голосов
/ 11 августа 2009

Я установил права доступа к файлу на 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]

Почему это?

Ответы [ 3 ]

8 голосов
/ 11 августа 2009

Я предполагаю, что 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
2 голосов
/ 28 июля 2013

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

после небольшого исследования нашел его.

"MODS CACHE PATH NOT WRITEABLE" фактически ссылается на саму папку vqmod, а не на папку кэша.

sudo chmod -R 777 vqmod 

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

1 голос
/ 11 августа 2009

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

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;
}
...