Как решить проблемы с доступом к файлам площадки, созданным 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.
Вот сам файл скрипта:
Источник: loco.ru