Проблема: не удаляются файлы и папки по 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
almix
Разработчик Loco, автор статей по веб-разработке на Yii, CodeIgniter, MODx и прочих инструментах. Создатель Team Sense.
Вы можете почитать все статьи от almix'а.
- 1 Git для начинающих. (12.04.2013)
- 0 Composer – пакетный менеджер PHP. Что и как? (22.07.2014)
- 0 Лишь этот голос. Наталья Ром – Хочу говорить крaсиво! Техники речи. Техники общения (23.07.2014)
- 0 Путешественнику на заметку: Необходимые выражения на разных языках (28.11.2014)
- 0 Synology и VPN подключение удалённого компьютера. (31.05.2014)
- 0 MySQL и PHP: Вычисление возраста (количество лет) по дате рождения (20.06.2017)
- 0 Браузер не открывает страницы, а скайп и icq работают. Что делать? (12.05.2014)
- 0 Если на флешке пропали файлы (07.02.2014)
- 0 Как изменить часовой пояс на сервере (16.11.2013)
- 0 Ошибка при выполнении команды grunt после обновления OS X 10.9: Bus error: 10. Перестал работать grunt (07.11.2013)
- 0 PHP: Как удалить файлы по маске? (07.11.2013)
- 0 Регулярные выражения в PHP (12.04.2014)
- 0 Как сделать потоковое видео на сайте. (24.10.2013)
- 0 Защита от спама в phpBB3 без капчи (09.10.2013)
- 0 Php функция implode внутри запроса SELECT к MySQL. (02.09.2013)
- 0 Защитить сайт или определённую папку паролем с помощью .htaccess (27.05.2013)
- 0 Удаление папок subversion (.svn) из проекта в Windows (22.03.2013)
- 0 Как убрать папку www из денвера? (22.03.2013)
- 0 Устанавливаем и настраиваем WampServer (аналог MAMP в Mac и возможная замена Denwer'у) на Windows (22.03.2013)
- 0 Гугл закрывает Google Reader (17.03.2013)
- 0 Сброс пароля для root в mysql установленном через Denwer в Windows (14.03.2013)
- 0 Полезные возможности PhpStorm и настройка горячих клавиш (14.03.2013)
- 0 Создание нового репозитория на Github, перенос локального репозитория и обновление удалённого через командную строку (30.03.2013)
- 0 Git "command not found" после обновления OS X до Mountain Lion (20.03.2013)
- 0 Использование веток (branches) в Github при разработке и доработке кода. Как делать pull request автору репозитория. (20.03.2013)
13 комментариев
я просветился)
Я ввожу в адресную строку:
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
переписать , наверное уголки не те что надо - надо угловые скобки...
Исправил в коде здесь.
Про уголки не понял. Я не знаю, чем «уголки» отличаются от «угловых скобок».
Про «здесь» тоже не понял. Это ссылка, которая не получились или речь идёт о статье.
Вы испытывали действие этого скрипта на реальном хосте или нет? Если да, скиньте, плиз, рабочий файл на E-mail: short01(зверь)mail.ru
И хорошо бы дополнить инструкцию реальным примером записи путей в адресную строку.
Заранее благодарю!
Рабочий код добавлю в статью.
Регулярно им для Битрикса пользовался - там файлы создаются другим пользователем и по FTP как раз и невозможно права поменять.
Только код в архивном файле отличается от кода в статье. И Вы так и не сказали, как правильно ввести адрес в адресную строку браузера?
Вот такой конструкции достаточно: http://site.com/chmod.php?site.com/www/0, если папка “0” лежит в корне сайта на хосте?
У меня работает код как в статье написано вызов:
http://site.com/chmod.php?0 - если относительный путь. У вас какой хостер?
Хостинг вот этот: http://advancedhosters.com/
Конечно, я не сам арендую. Друг пустил за малую долю.
Не получается, пишет "Warning: chmod() [function.chmod]: Operation not permitted in /www/clients/docntt/www.ocntt.dp.ua/chmod.php on line 8"
В чем может быть проблема ?.