В PHP не удалось создать каталог с помощью команды mkdir
У меня есть ранее работавший PHP скрипт, который способен создать каталог с mkdir
:
$webfolder = "/var/www/html/images/user";
mkdir($webfolder, 0770);
Я внес некоторые изменения в настройку разрешений папки /var/www/html/images
, которая теперь:
drwxrwx---. myself apache system_u:object_r:httpd_sys_content_t:s0 images
Я думаю, что раньше эта папка принадлежала apache
. Но поскольку apache
имеет полные права на чтение, запись и выполнение как пользовательская группа, я задаюсь вопросом, почему он не может создать папку внутри. Использование mkdir
приводит к получению логического значения false
.
Является ли проблема из-за владения каталогом или есть еще какие-то причины? Обратите внимание, что я использую PHP версии 5.4.
Добавлен журнал ошибок:
[Пн Дек 17 11: 12: 34 2012] [ошибка] [клиент 127.0.0.1] предупреждение PHP: mkdir (): разрешение отклонено в /var / www / html / upload на строке 33, референт: https://mywebsite.com/referer
2 ответа:
Ответ находится прямо передо мной, но я его пропускаю из-за моего незнания SELinux.
Тип контекста SELinux должен быть установлен как
httpd_sys_content_rw_t
вместоhttpd_sys_content_t
, чтобы папка была доступна для чтения и записи для apache. Рекурсивное изменение контекста выполняется следующей командой:# chcon -R -t httpd_sys_content_rw_t /var/www/html/images
Боже мой. Надеюсь, это поможет другим, кто столкнется с этим.
На CENTOS7 VM, с PHP5. 4. 16 / Apache 2.4.6 / mariadb 5.5.44, каталог шаблонов smarty не был доступен для записи для создания скомпилированных файлов шаблонов и выдавал следующую ошибку (в /var / log / httpd/error_log):
[Thu Mar 31 12:36:08.201383 2016] [:error] [pid 13094] [client 192.168.212.65:52204] PHP Fatal error: Smarty error: unable to write to $compile_dir '/var/www/html/app1/templates_c'. Be sure $compile_dir is writable by the web server user. in /var/www/html/app1/libs/smarty/Smarty.class.php on line 1093
Следовательно, приложение PHP отображало пустой экран.
Chmod 777 templates_c также не работал; но согласно предложению @ Question Overflow, разрешение на web root на этой виртуальной машине действительно решило проблему.
Мне пришлось выполнить:
[root@appserver html]# chcon -R -t httpd_sys_content_rw_t /var/www/html
Конечно, templates_c & cache должен принадлежать пользователю apache:
Потратив на это больше половины дня, наткнулся на такое. Спасибоdrwxr-xr-x. 2 apache apache 6 Mar 31 12:56 templates_c drwxr-xr-x. 2 apache apache 6 Mar 31 12:56 cache