2010-06-04 2 views
6

Это связано с загрузкой мультимедиа в Wordpress.Невозможно загрузить медиа через загрузчик Wordpress

Каждый раз, когда WP создает папку для новых загрузок (она упорядочивает закачки по годам и месяцам: yyyy/mm), она создает ее с пользователем и группой «apache: apache» с полным доступом ко всем (777 или drwxrwxrwx .)

Однако, после того, WP не может создать папку в этой папке (например:. MkDir 2011 успешно, но MkDir 2011/01 терпит неудачу) Кроме того, загрузки не может быть перемещен в эти вновь созданные папки, даже если разрешения являются 777 (rwxrwxrwx).

Раз в месяц у меня есть chown вновь созданных папок, которые будут такими же, как и у пользователя: группа, как и остальные файлы. Как только я это сделаю, загрузка работает отлично (что не имеет для меня смысла. Действительно разочаровывающая часть заключается в том, что эта проблема не существует в других установках WP в других доменах на том же сервере.

* Я не был уверен, что это должно быть здесь или на ServerFault


Edit:. содержащий каталог /.../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] и они одинаковы для каждого пути. Единственное, что отличается от пользователя.

+0

У меня была эта проблема один раз с WordPress на сервере Plesk, никогда не выяснили, как исправить это и закончили перемещать его на другой хост. –

+0

Черт, я в той же лодке. Это не очень многообещающе. –

ответ

2

Попытайтесь пойти на страницу Различные настройки (или носитель в зависимости от версии) и убедитесь, что каталог загрузки по-прежнему сор-контента/загрузки.

Если вам нужно. установите полный URL-адрес тоже.

Кроме того, в качестве окончательного решения отключите возможность организовать их в папки, чтобы WordPress даже не нуждался в создании папок.

+0

Ваше окончательное решение действительно работает, однако оно не затрагивает основную проблему :(Если я не получу ответа на этот вопрос, я определенно награжу вас щедростью. Как побочный вопрос, какой у вас был хозяин эта проблема на? –

+0

Некоторые случайные небольшие магазины для клиента. Мне пришлось бороться с проблемой после выпуска с хостом, пока я наконец не убедил клиента перейти на мой хост через 2 года. Как ни странно, с тех пор. Это, вероятно, вещь в безопасном режиме PHP.Я сделал несколько поисковых запросов, и увидел пару рекомендаций, чтобы заставить владельцев «никому». В этой ветке есть куча сообщений об этом: http://wordpress.org/support/topic/254069 –

+0

Ой, я предполагаю, что вы это пробовали, но рекурсивно явно задали сценарии и папки одному владельцу? –

1

Проверьте бит setuid или setgid в каталоге выше каталога 2010 года. ls -l будет иметь s или S в разрешениях для каталога. Убедитесь, что этот каталог имеет правильное владение.

+0

Я попробовал свой пример скрипта с '' '' '' '' '' '' '' '' '' '' '' tmp', но мне не удалось создать вложенную папку (см. Мое редактирование). –

+0

Являются ли каталоги созданы как один и тот же пользователь в обоих доменах? Сравните дерево каталогов до /. Может возникнуть проблема разрешения проблемы с деревом. – BillThor

+0

Я сравнил дерево каталогов до '/ var/www/vhosts', где расположены оба домена. Насколько я могу судить, они были одинаковыми разрешениями. Единственное, что отличалось между двумя путями, было пользователем. Группа одинакова для обоих путей (psaserv), но у каждого домена есть другой пользователь (ограничение Plesk). –

1

Попробуйте создать каталог рекурсивный с 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() 
      ) 
     ); 
+0

Я попробовал, но это не имеет значения. Кроме того, это не то, как WP создает каталоги (для загрузки как минимум), и я не хочу разворачивать кодовую базу для чего-то такого простого. –

1

Недавно у меня была аналогичная проблема с Joomla, и я решил проблему, добавив myuser в группу apache и добавив apache в группу psaserv.

+0

Казалось, что это сработает, но не кубик: / –

1

Один из наших сайтов на медиахранилище DV имел эту проблему. Выключение безопасного безопасного режима PHP.Каталоги все еще были созданы как apache: apache, но там были разрешены медиа-файлы.

1

Единственное, что мне пришло в голову - WP скажет вам, что он может Nto скопировать файл /wp-content/upload даже если все разрешения прав .... если

upload_max_filesize

в php.ini является слишком мал (скажем 2M, и вы пытаетесь загрузить файл 3.5MB)!

Надеюсь, что это поможет всем тем, кто имеет права доступа, но все еще не может загрузить!

1

Вам не нужно 777 в ваших каталогах, максимум 775 должно быть достаточно. Просто убедитесь, что он установлен в каталоге загрузок с 755 для всех остальных каталогов выше.

Кроме того, вы можете попробовать его привязать к www-данным, иногда это помогает, когда ваш пользователь ftp, с которым вы вошли в систему, как при изменении разрешений один раз в месяц, не имеет достаточного уровня доступа и владения каталогами этим пользователь предотвращает возможность записи в них сервера.

Наконец, как кто-то указывал выше, может потребоваться до предельного размера загрузки вместе с убедившись, что другие параметры загрузки файлов, связанных с php.ini правильны:

http://php.net/manual/en/ini.core.php

http://kb.mediatemple.net/questions/137/How+can+I+edit+the+php.ini+file%3F#dv

3

Решение - использовать FastCgi. Это заставляет PHP работать как пользователь, который владеет сайтом. Новые файлы и папки будут одинаковыми пользователями и группами. Это решит вашу проблему.

Существует штраф за исполнение для FastCgi, но вы получаете дополнительную безопасность, поскольку он ограничивает php. Если вы размещаете несколько веб-сайтов с несколькими пользователями, это может быть хорошей идеей.

1

Одной из распространенных причин, часто упускаемых из виду, является дисковая квота, то есть вы исчерпали дисковое пространство.

Смежные вопросы