изменить разрешение каталога (chmod) в php - PullRequest
1 голос
/ 11 ноября 2011

Я гуглил, но не могу заставить свой скрипт работать.

это мой код

if (is_dir("tmp")) {
    if (substr(sprintf("%o", fileperms("tmp")), -4) == "0777") {
        echo "good";
    } else {
        echo "going to chmod the tmp folder to 777";
        if (!chmod("tmp", octdec(0777))) { // tried chmod("tmp, 0777) too
                echo "Oops, I couldn't chmod the /setup/tmp directory, please do this manually";
        }
    }
} else {
    echo "we'll make the folder";
}

Я не могу заставить работать chmod,Я где-то читал, что если глобальные регистры отключены, это не сработает (у меня отключен этот параметр).

Я следовал руководству по PHP.net и некоторым примерам, которые они предоставили в комментариях пользователей., а также некоторые сообщения о переполнении стека, которые я нашел актуальными.но, возможно, мне нужно настроить некоторые параметры PHP, чтобы заставить это работать?

Есть ли способ заставить функцию chmod работать без необходимости изменять PHP.ini?

Ответы [ 3 ]

0 голосов
/ 11 ноября 2011

Вы не предоставили нам достаточно информации, чтобы определить причину сбоя chmod(). Возможно, веб-сервер не имеет достаточных прав для изменения прав доступа к каталогу.

Владелец процесса веб-сервера должен владеть каталогом или быть членом группы-владельца. Например, если root владеет tmp , а ваш веб-сервер работает как пользователь 'apache', изменить права доступа к каталогу из PHP будет невозможно.

Я полагаю, что настройки, которые вы упоминаете в php.ini , предназначены для отладки, а не для волшебного исправления chmod. Попробуйте добавить следующие строки кода к вашему PHP-скрипту, и вы получите более полезные выходные данные отладки:

ini_set('display_errors', 'On');
error_reporting(E_ALL)
0 голосов
/ 11 ноября 2011

Пользователь, который запускает демон php или демон веб-сервера, должен иметь права на запись в каталог, который вы пытаетесь выполнить chmod. В моем случае, www-data - это пользователь, который запускает php, и любые команды, которые php пытается выполнить, будут выполняться как пользователь www-data.

Если вы создадите каталог с помощью функции php mkdir, вы заметите, что владельцем каталога является тот, кто когда-либо запускал демон php или веб-сервера. И любой каталог, который был создан php, php сможет chmod, chown, делать с ним что угодно, потому что он является владельцем.

Вы можете либо

  1. выберите каталог так, чтобы его владельцем был пользователь php
  2. установить права на запись для группы и установить группу в ту же группу, что и пользователь php
  3. сделать что-то вроде предоставления привилегий sudo пользователю php, что не рекомендуется, кстати.
0 голосов
/ 11 ноября 2011

Представлять так: -

chmod("tmp", 0777);
...