Невозможно загрузить медиафайл через загрузчик Wordpress - PullRequest
6 голосов
/ 04 июня 2010

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

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

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

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

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


Редактировать: содержащий каталог /.../httpdocs/blog/wp-content/uploads имеет правильное владение

drwxrwxrwx 5 myuser psaserv 4096 Jun  3 18:38 uploads

Это среда Plesk / CentOS, размещенная в Media Temple (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], и они одинаковы для каждого пути. Единственное, что отличается, это пользователь.

Ответы [ 9 ]

3 голосов
/ 11 октября 2012

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

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

2 голосов
/ 15 июня 2010

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

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

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

1 голос
/ 22 марта 2013

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

1 голос
/ 06 июля 2012

Вам не нужно 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

1 голос
/ 23 июля 2011

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

upload_max_filesize

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

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

1 голос
/ 26 августа 2010

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

1 голос
/ 16 июня 2010

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

1 голос
/ 05 июня 2010

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

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

...