PHP скрипт не может создать каталог с разрешениями 777

У меня есть сценарий, который автоматически создает каталог, если он не существует, и устанавливает разрешения на 777. Проблема в том, что он только устанавливает разрешения на 755:

if (!file_exists($this->get_upload_dir()))
    mkdir($this->get_upload_dir(), 0777);

Если я проверяю владельца созданного каталога, он показывает www-data [33], Я не уверен, что означает 33. Является www-data пользователь сервер использует для создания каталогов? Если так, как я могу позволить ему создать каталог с разрешениями 777?

Также обратите внимание, я уже установил следующую команду:

sudo chown -R www-data:www-data /var/www/html

1 ответ

www-data это пользователь, который apache2 веб-сервер работает как в Ubuntu. (Обычно этот пользователь имеет UID 33, число, которое вы видите.) Таким образом, файлы, созданные с помощью веб-сервера, принадлежат этому файлу. Таким образом, когда вы создаете файл, в игру вступает umask сервера, и все установленные вами права контролируются umask.

Вы можете обойти это тремя способами:

  1. Использовать chmod PHP функция для установки разрешения после создания.
  2. Использовать umask Функция PHP для установки Umask перед созданием. Имейте в виду, это установит umask для всех потоков многопоточного сервера и может иметь непредвиденные последствия.
  3. Установить umask для самого веб-сервера. Это хуже, чем (2) в том, что затрагивается каждый процесс и каждый сайт, настроенный на сервере.

Наилучшим вариантом является использование (1). Взгляните на этот ответ SO для примера (1), этот вопрос SO для обсуждения (2) и этот вопрос SF для примера (3).

Другие вопросы по тегам