Проблема с правами доступа WordPress

Недавно решил поменять плагин кэширования у себя на блоге и столкнулся с задачей, с которой пришлось изрядно повозится. Дело в том, что предыдущий плагин, W3 Total Cache оставил папку и пару файлов, которые я не мог удалить. Configuration-Flaw-in-W3-Total-Cache-Exposes-Tens-of-Thousands-of-Sites-2Зайдя с помощью FileZilla по FTP на сайт я попытался найти логическое объяснение тому, что файлы advanced-cache.php, db.php, object-cache.php и папка cache в директории wp-content не хотят удалятся.

Заметил, что права доступа на файлы отличаются от привычных 644, попробовал изменить — фигушки. Владелец данных файлов тоже отличался. Открыл ISP Manager, попробовал изменить владельца через Файловый менеджер и снова ничего не получилось. Время шло и я решил поискать решение в интернете. Что я нашел:

Удаление с помощью Файлового менеджера

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

Но вы можете удалить свою папку на уровень выше, в которой находится папка другого владельца. То есть, удалив wp-content я избавился от папки cache и всех неудаляемых файлов раз и на всегда. Разумеется, все нужное мне содержимое wp-content я предварительно сохранил у себя на компьютере и скопировал обратно, но уже без проблемных файлов.

Рекурсивная смена прав на файлы и папки

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

</code></p>

<pre class="code-wrap"><code><?php

function chmod_R($path, $perm) {

  $handle = opendir($path);
  while ( false !== ($file = readdir($handle)) ) {
    if ( ($file !== "..") ) {
      @chmod($path . "/" . $file, $perm);
      if ( !is_file($path."/".$file) && ($file !== ".") )
        chmod_R($path . "/" . $file, $perm);
    }
  }
  closedir($handle);

}

$path = $_SERVER["QUERY_STRING"];

if ( $path{0} != "/" )
  $path = $_SERVER["DOCUMENT_ROOT"] . "/" . $path;

chmod_R($path, 0777);
echo $path;

?></code></pre>
<p class="code-wrap"><code>


Разместите этот файл в корневой директории

site.com/file.php

Вызывать скрипт нужно так:

site.com/file.php?путь_к_нужной_директории 

То есть, чтобы выставить на файлы и папки в директории wp-content права 777, нужно ввести в адресной строке:

site.com/file.php?wp-content

* если вызвать site.com/file.php, все файлы и папки получат права 777, что не совсем безопасно.

* после того, как выставите права, обязательно удалите файл с сервера, опять таки, в целях безопасности.