Проблема: не удаляются файлы и папки по FTP

Нет картинки

- Как решить проблемы с доступом к файлам площадки, созданным PHP-скриптами? - Ошибка 550. Невозможно удалить файлы через FTP - Я пытаюсь удалить Joomla с хостинга, но некоторые папки не удаляются, хотя я и пытаюсь выставить на них атрибут доступа 777

Порой сталкиваемся с проблемой: хотим удалить ненужную папку или файл с сервера по FTP, а не можем! Как так? Вспоминаем о правах доступа... выставляем в ftp-клиенте 777 там где надо, но это не решает проблемы!

Такое происходит например в Joomla, когда устанавливаем свой компонент и других системах. Оказывается что такое бывает, если файлы были созданы PHP-скриптом и их владелец не вы. То есть от своего имени такие файлы удалить по FTP невозможно.

Касательно Joomla - изначально её файлы были созданы под фтп-пользователем и принадлежат ему. Но веб-сервер на большинстве хостингов работает под совершенно другой учетной записью. И при установке новых компонентов Joomla действует именно от имени последнего и создает файлы, которые по факту принадлежат непосредственно ему. Установка компонента чаще всего заключается в создании директорий /components/com_xxx и /administrator/components/com_xxx и файлов в них. И при попытке удалить их фтп-клиентом ничего не получается только потому, что один пользователь естественно не может изначально иметь права удалять файлы другого.

Но есть выход - создать или использовать скрипт, который работая от имени пользователя веб-сервера будет удалять ненужные папки или менять их права на 777, что позволит их удалить уже фтп-клиентом. Такие скрипты называются web-shell.

 

Вот что предлагает хостинг Masterhost:

Создать файл (например "chmod.php") с содержимым:

<?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;

?>

Разместите этот файл на площадке, в директории, доступной веб-серверу, например, как:

yoursite.ru/www/chmod.php

где yoursite.ru/www — корневая директория (DocumentRoot) вашего сайта на сервере.

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

http://yoursite.ru/chmod.php?путь_к_нужной_директории

или так:

http://yoursite.ru/chmod.php?/home/uXXXXX/yoursite.ru/www/путь_к_нужной_директории

В первом случае указывается путь относительно DocumentRoot для вашего сайта (yoursite.ru/www/ в данном примере). Во втором случае (uXXXXX — идентификатор вашей площадки) — абсолютный путь от корневой директории сервера. Это для Мастерхоста так. У вас другой путь может быть, смотря какой хостер.

При запуске скрипта без параметров будут изменены права для всех файлов и директорий, располагающихся в DocumentRoot и можно спокойно удалить или закачать необходимое по FTP.

Вот сам файл скрипта: chmod.rar

Источник: loco.ru

almix
Разработчик Loco, автор статей по веб-разработке на Yii, CodeIgniter, MODx и прочих инструментах. Создатель Team Sense.

Вы можете почитать все статьи от almix'а.



Другие статьи по этой теме:

Комментарии (13)     Подпишитесь на RSS комментариев к этой статье.

13 комментариев

#7
Alex говорит:
December 7, 2010 at 03:15 pm
спасибо)
я просветился)
#8
Kolobokk говорит:
April 3, 2011 at 01:13 pm
Для особо тупых пояните, пожалуйста!

Я ввожу в адресную строку:
http://site.com/chmod.php?http://site.com/0

Хочу удалить папку “0”, но ничего не происходит. То есть, я не могу изменить права для фалов в папке.

В окне браузера появляется:
‹?php function chmod_R($path, $perm) { $handle = opendir($path); и т.д.

Что я делаю не так? Спасибо!

P.S. Такой путь тоже пробовал:

http://site.com/chmod.php?site.com/www/0
#9
Саша говорит:
April 3, 2011 at 10:54 pm
Думаю в файле chmod.php в начале и в конце надо
переписать , наверное уголки не те что надо - надо угловые скобки...

Исправил в коде здесь.
#10
Kolobokk говорит:
April 5, 2011 at 02:30 pm
Саша, спасибо за ответ!

Про уголки не понял. Я не знаю, чем «уголки» отличаются от «угловых скобок».

Про «здесь» тоже не понял. Это ссылка, которая не получились или речь идёт о статье.

Вы испытывали действие этого скрипта на реальном хосте или нет? Если да, скиньте, плиз, рабочий файл на E-mail: short01(зверь)mail.ru
И хорошо бы дополнить инструкцию реальным примером записи путей в адресную строку.
Заранее благодарю!
#11
Саша говорит:
April 5, 2011 at 06:03 pm
“Уголки” в статье исправил) когда код копировался они в другие уголки (не кавычки) обратились.

Рабочий код добавлю в статью.
Регулярно им для Битрикса пользовался - там файлы создаются другим пользователем и по FTP как раз и невозможно права поменять.
#12
Kolobokk говорит:
April 6, 2011 at 07:14 pm
Спасибо Саша!

Только код в архивном файле отличается от кода в статье. И Вы так и не сказали, как правильно ввести адрес в адресную строку браузера?

Вот такой конструкции достаточно: http://site.com/chmod.php?site.com/www/0, если папка “0” лежит в корне сайта на хосте?
#13
Саша говорит:
April 7, 2011 at 02:24 am
Чем отличается код, Колобок?

У меня работает код как в статье написано вызов:
http://site.com/chmod.php?0 - если относительный путь. У вас какой хостер?
#14
Kolobokk говорит:
April 7, 2011 at 08:10 am
Саша, я в кодах не силён. Просто открыл оба в Notepad++ и вижу, что коды разные.

Хостинг вот этот: http://advancedhosters.com/
Конечно, я не сам арендую. Друг пустил за малую долю.
#15
Юлия говорит:
May 9, 2011 at 12:17 pm
Спасибо! Очень помогла статья, все получилось удалить.
#16
Эдуард говорит:
August 7, 2011 at 11:28 am
Спасибо! Ваша статья мне, здорово помогла!
#134
Денис говорит:
October 27, 2011 at 03:54 am
спасибо!
#779
Andrey говорит:
February 12, 2013 at 08:09 pm

Не получается, пишет "Warning: chmod() [function.chmod]: Operation not permitted in /www/clients/docntt/www.ocntt.dp.ua/chmod.php on line 8"

В чем может быть проблема ?.

#1404
Руслан говорит:
August 2, 2015 at 04:40 pm
Спасибо, удалил в 3 секунды. Респект!Крутой