Это имеет отношение к загрузке медиа в Wordpress.
Каждый раз, когда WP создает папку для новых закачек (он организует загрузки к году и месяцу: yyyy/mm), это создает его с "apache:apache' пользователь и группа с полным доступом ко всем (777 или drwxrwxrwx
).
Однако после этого WP не может создать папку в той папке (например: mkdir 2011
успешно выполняется, но mkdir 2011/01
сбои). Кроме того, загрузки не могут быть перемещены в эти недавно созданные папки даже при том, что полномочия 777 (rwxrwxrwx
).
Один раз в месяц я имею к chown
недавно созданные папки для совпадения с user:group как остальной частью файлов. После того как я делаю это, загрузка хорошо работает (который не имеет смысла мне, действительно расстраивающая часть - то, что эта проблема не существует в других установках WP на других доменах на том же сервере.
* я не был уверен, должно ли это быть здесь или на serverfault.
Править: Содержание каталога /.../httpdocs/blog/wp-content/uploads
имеет корректное владение
drwxrwxrwx 5 myuser psaserv 4096 Jun 3 18:38 uploads
Это - среда Plesk/CentOS, размещенная Храмом Медиа (dv).
Я записал следующий сценарий тестирования для моделирования проблемы
<pre><?php
$d = "d" . mt_rand(100, 500);
var_dump(
get_current_user(),
$d,
mkdir($d),
chmod($d, 0777),
mkdir("$d/$d"),
chmod("$d/$d", 0777),
fileowner($d),
getmyuid()
);
Сценарий всегда создает первый каталог mkdir($d)
успешно. На домене A, где проблема WP, она не может создать вложенный каталог mkdir("$d/$d")
. Однако на домене B, оба каталога успешно создаются.
Я запускаю каждый скрипт в /var/www/vhosts/domainA/httpdocs/tmp/t.php
и /var/www/vhosts/domainB/httpdocs/tmp/t.php
соответственно я проверил полномочия tmp
, httpdocs
, и domain[AB]
и они - то же для каждого пути. Единственной вещью, которая отличается, является пользователь.
Попробуйте зайти на страницу настроек miscellaneous (или media, в зависимости от версии) и убедиться, что каталог загрузки по-прежнему wp-content/uploads.
Если нужно. задайте полный url тоже.
Также, в качестве последнего решения, отключите опцию организации их в папки, чтобы WordPress даже не нужно было создавать папки.
Попробуйте создать рекурсивный каталог с помощью mkdir ($ d, true)
<pre><?php
$d = "d" . mt_rand(100, 500);
var_dump(
array(
get_current_user(),
$d,
mkdir($d,true),
chmod($d, 0777),
mkdir("$d/$d", true),
chmod("$d/$d", 0777),
fileowner($d),
getmyuid()
)
);
Проверьте наличие бита setuid или setgid в каталоге выше каталога 2010. ls -l будет иметь s или S в разрешениях для каталога. Убедитесь, что этот каталог имеет правильное право собственности.
Недавно у меня была аналогичная проблема с Joomla, и я решил ее, добавив myuser в группу apache и добавив apache в группу psaserv.