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.
Вы можете обойти это тремя способами:
- Использовать
chmod
PHP функция для установки разрешения после создания. - Использовать
umask
Функция PHP для установки Umask перед созданием. Имейте в виду, это установит umask для всех потоков многопоточного сервера и может иметь непредвиденные последствия. - Установить
umask
для самого веб-сервера. Это хуже, чем (2) в том, что затрагивается каждый процесс и каждый сайт, настроенный на сервере.
Наилучшим вариантом является использование (1). Взгляните на этот ответ SO для примера (1), этот вопрос SO для обсуждения (2) и этот вопрос SF для примера (3).