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


person Question Overflow    schedule 17.12.2012    source источник
comment
Папка /var/www/html/images/user существует? Если да, то с какими разрешениями? И можете ли вы - для целей тестирования - изменить владельца родительской папки на apache и попробовать, работает ли он тогда?   -  person hakre    schedule 18.12.2012
comment
@hakre, у меня проблемы с SELinux. Смотрите мой ответ. Спасибо за ваше терпение и время :)   -  person Question Overflow    schedule 18.12.2012


Ответы (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

Печаль во благо. Надеюсь, это поможет другим, кто сталкивается с этим.

person Question Overflow    schedule 18.12.2012
comment
Привет, у меня такая же проблема.. с проектом, который я пытаюсь создать в CodeIgnter и разрабатываю в Ubuntu 14.14 Lts.. Не могли бы вы объяснить мне более подробно шаги, которые мне нужно сделать, чтобы исправить эту ошибку? ?? Чтобы дать вам дополнительную информацию: абсолютный путь /opt/lampp/htdocs/www/my-app/public/uploads .. В основном, я пытаюсь сделать так, чтобы каждый вошедший в систему пользователь загружал файлы в папку загрузки, а также создавал папки-альбомы (это будет сделано с помощью php) для хранения фотографии.. - person ltdev; 30.09.2015
comment
Вы можете просмотреть темы, которые я создал для получения дополнительной информации в Ubuntu">stackoverflow.com/questions/32861261/, forum.codeigniter.com /thread-63136.html, askubuntu.com/questions/679844/ - person ltdev; 30.09.2015

На виртуальной машине CentOS7 с 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, разрешение на веб-корень на этой виртуальной машине решило проблему.

Мне пришлось выполнить:

[root@appserver html]# chcon -R -t httpd_sys_content_rw_t /var/www/html

конечно, templates_c и кеш должны принадлежать пользователю 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

Потратив больше полдня, наткнулся на это. Спасибо

person NBhat    schedule 31.03.2016