Удаление файлов по FTP

(Ответов: 9, Просмотров: 1855)
  1. Banned
    • Регистрация: 06.11.2010
    • Сообщений: 15
    • Репутация: 16
    Мой скрипт позвляет мне заливать рисунки с удаленного сервера прямо себе на сайт. Но после этих предвижений я не могу удалить рисунки которые загрузил изменить атрибуты самих рисунков тоже кстати не могу. Кто нибудь сталкивался с подобной проблемой, как решить?
    • 0
  2. Member Аватар для AMS
    • Регистрация: 06.11.2010
    • Сообщений: 53
    • Репутация: 15
    разве можно осуществить вход на shared hosting ftp под рутом?
    • 0
  3. Banned
    • Регистрация: 06.11.2010
    • Сообщений: 15
    • Репутация: 16
    Ниже приведена код функции скрптового.
    /**
    * Сохраняем все изображения в тексте
    *
    * string @text Текст, в котором будет производиться поиск и загрузка изображения
    * string @link Ссылка на страницу, текст с которой обрабатывается
    * int @maxSize Максимальный размер сохраненных файлов(в кб)
    * int @width Ширина изображения. Если width == -1, либо не передан, то будет подставляться исходное значение
    * int @height Высота изображения. Если height == -1, либо не передан, то будет подставляться исходное значение
    */
    function saveAllImages($text, $link, $maxSize, $width = -1, $height = -1) {

    static $size = -1;

    // Куда сохранять
    $save_to = $_SERVER['DOCUMENT_ROOT'] . '/uploads/';

    // Путь относительно сайта
    $site_path = '/uploads/';

    // Переводим кб -> б
    $maxSize *= 1024;

    // Проверяем - папка ли?
    if(!is_dir($save_to)) {
    echo 'Error: folder <b>', $save_to, '</b> does not exist.';echo "\n";
    return $text;
    }

    // Проверяем права
    $mod = substr(sprintf('%o', fileperms($save_to)), -4);
    if($mod != '0777') {
    echo 'Error: incorrect permissions (', $mod, ') for folder <b>',$save_to,'</b>';echo "\n";
    return $text;
    }

    // Получаем размер уже загруженных файлов
    if($size == -1) {
    $size = getDirSize($save_to);
    }

    $text = preg_replace('#<img\s++([^<>]{0,500})src\s*+=\s*+(?:\'|")([^\'"<>]+)(?:\'|")\s*+([^<>]{0,500})>#is', '<img $1 src="$2" $3>', $text);
    $text = preg_replace('#<img\s++([^<>]{0,500})src\s*+=\s*+([^\'"<>\s]+)([^<>]{0,500})>#is', '<img $1src="$2"$3>', $text);
    $tmp_name = '';

    // Вырезаем все изображения
    preg_match_all('#(<img[^><]{6,500}>)#is', $text, $images);
    foreach($images[1] as $img) {
    // Проверяем - не превышен ли лимит на размер?
    if($size > $maxSize) {
    echo 'Attention: the limited size of images folder is exceeded'; echo "\n";
    break;
    }

    $good = false;
    $err_code = 0;
    do {
    // Проверяем - надо ли менять width и height?
    $w = $width;
    if($width == -1) {
    $w = '';
    if(preg_match('#width\s*+=\s*+(\'|")(\d++)\\1#i', $img, $data)) {
    $w = $data[2];
    }

    if(preg_match('#width\s*+=\s*+(\d++)#i', $img, $data)) {
    $w = $data[1];
    }
    }

    $h = $height;
    if($height == -1) {
    $h = '';
    if(preg_match('#height\s*+=\s*+(\'|")(\d++)\\1#i', $img, $data)) {
    $h = $data[2];
    }

    if(preg_match('#height\s*+=\s*+(\d++)#i', $img, $data)) {
    $h = $data[1];
    }
    }

    // Получаем ссылку на изображение
    if(!preg_match('#src="([^"]++)"#is', $img, $data)) {
    $err_code = 1;
    break;
    }
    $src = createFullLink($link, $data[1]);

    // Получаем имя хоста + путь к изображению
    if(!preg_match('#^(?:http://)?((?:[0-9a-z_-]++\.)++[0-9a-z]{2,5})(/.++)$#is', $src, $data)) {
    $err_code = 2;
    break;
    }
    list(, $host, $get) = $data;
    $get = str_replace('%2F', '/', rawurlencode($get));

    // Сохраняем изображение

    // Соединяемся
    if(!($fs = @fsockopen($host, 80, $errno, $errstr, 3))) {
    $err_code = 4;
    break;
    }

    // Отправляем запрос
    $request = "GET {$get} HTTP/1.0\r\n";
    $request .= "Host: {$host}\r\n";
    $request .= "Referer: {$link}\r\n";
    $request .= "Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1\r\n";
    $request .= "Accept-Language: ru\r\n";
    $request .= "Accept-Charset: windows-1251, utf-8;q=0.6, *;q=0.1\r\n";
    $request .= "Expires: no-store, no-cache, must-revalidate\r\n";
    $request .= "Cache-Control: no-cache\r\n";
    $request .= "User-Agent: Opera/9.80 (Windows NT 6.1; U; ru) Presto/2.2.15 Version/10.00\r\n";
    $request .= "Connection: close\r\n";
    $request .= "\r\n";
    if(!fwrite($fs, $request)) {
    break;
    }

    // Генерируем имя временного файла
    $tmp_name = md5(time() . md5(rand(1024, 65536)));
    while(file_exists($save_to . $tmp_name)) {
    $tmp_name = md5(time() . md5(rand(1024, 65536)));
    }
    $tmp_name = $save_to . $tmp_name;
    $blabla = fopen($tmp_name, 'wb');
    if(!$blabla) {
    $err_code = 3;
    fclose($fs);
    break;
    }

    // Получаем ответ, сохраняя его в файл
    $readed = 0;
    $h = true;
    while(!feof($fs)) {
    $buffer = fgets($fs, 512);

    if($h == true) {
    if(strlen($buffer) < 3) {
    $h = false;
    }
    else if(in_array($buffer, array("\r", "\n", "\r\n", "\n\r", ''))) {
    $h = false;
    }

    continue;
    }

    if(!fputs($blabla, $buffer)) {
    $err_code = 5;
    break;
    }

    $readed += strlen($buffer);
    if($readed > 4194304) {
    $err_code = 6;
    break;
    }
    }
    fclose($blabla);
    fclose($fs);
    unset($blabla);

    if($err_code > 0) {
    break;
    }

    // Проверяем - сохранилась ли?
    if(filesize($tmp_name) == 0) {
    $err_code = 7;
    break;
    }

    // Пытаемся определить тип изображения
    $type = '';
    if(!($res = @getimagesize($tmp_name))) {
    $err_code = 8;
    break;
    }

    switch($res[2]) {
    case 1: {
    $type = 'gif';
    break;
    }
    case 2: {
    $type = 'jpg';
    break;
    }
    case 3: {
    $type = 'png';
    break;
    }
    }

    if($type == '') {
    $err_code = 9;
    break;
    }

    // Получаем путь к изображению
    $fileDir = substr(md5($host), 0, 10) . '/';
    if(!is_dir($save_to . $fileDir)) {
    if(!mkdir($save_to . $fileDir)) {
    $err_code = 10;
    break;
    }
    }
    $fileName = substr(md5($get), 0, 10) . '.' . $type;

    if(file_exists($save_to . $fileDir . $fileName)) {
    $size -= filesize($save_to . $fileDir . $fileName);
    }

    if(!@copy($tmp_name, $save_to . $fileDir . $fileName)) {
    $err_code = 11;
    $size += filesize($save_to . $fileDir . $fileName);
    break;
    }
    $size += filesize($save_to . $fileDir . $fileName);


    if($size > $maxSize) {
    $err_code = 12;
    unlink($save_to . $fileDir . $fileName);
    break;
    }

    // Генерируем новый код для изображения
    $new_img = '<img src="'.$site_path . $fileDir . $fileName . '"';
    if($w != '') {
    $new_img .= ' width="'.$w.'"';
    }
    if($h != '') {
    $new_img .= ' height="'.$h.'"';
    }

    $new_img .= '>';
    $text = str_replace($img, $new_img, $text);
    $good = true;
    } while(false);
    if($tmp_name != '' && file_exists($tmp_name)) { unlink($tmp_name); }

    // echo $img, ' -> ', ($good ? 'ok' : 'err'), " err_code: {$err_code}\n";

    // Если сохранение не прошло успешно - удаляем изображение
    if(!$good) {
    $text = str_replace($img, '', $text);
    }

    if($size > $maxSize) {
    echo 'Attention: the limited size of images folder is exceeded'; echo "\n";
    break;
    }
    }

    return $text;
    }
    • 0
  4. Я из admitad :) Аватар для terehoff
    • Регистрация: 15.07.2009
    • Сообщений: 2,605
    • Записей в дневнике: 18
    • Репутация: 1150
    • Webmoney BL: ?
    овнеры файлов просто разные
    • 0
  5. Banned
    • Регистрация: 06.11.2010
    • Сообщений: 15
    • Репутация: 16
    А можно ли мне коим то образом создавать файлы и редактировать файлы под тем же пользователем, под которым я захожу?
    • 0
  6. Senior Member
    • Регистрация: 05.11.2010
    • Сообщений: 115
    • Репутация: 17
    Цитата Сообщение от GermaN Посмотреть сообщение
    А можно ли мне коим то образом создавать файлы и редактировать файлы под тем же пользователем, под которым я захожу?
    Этот вопрос нужно задавать непосредственно к хостеру.
    • 0
  7. Junior Member
    • Регистрация: 07.11.2010
    • Сообщений: 29
    • Репутация: 6
    Цитата Сообщение от GermaN Посмотреть сообщение
    А можно ли мне коим то образом создавать файлы и редактировать файлы под тем же пользователем, под которым я захожу?
    Тут два варианта:
    1) нужно права юзера донести до скрипта
    2) получить юзеру права апача.
    В целом всё зависит от настроек хостера

    Можно удалять файлы скриптом специальным
    • 0
  8. Junior Member
    • Регистрация: 06.11.2010
    • Сообщений: 23
    • Репутация: 10
    Цитата Сообщение от GermaN Посмотреть сообщение
    А можно ли мне коим то образом создавать файлы и редактировать файлы под тем же пользователем, под которым я захожу?
    попробуйте на пшп
    <?php
    unlink ('file.txt');
    ?>
    • 0
  9. Опытный Аватар для Crasher69
    • Регистрация: 08.09.2009
    • Сообщений: 437
    • Записей в дневнике: 5
    • Репутация: 175
    • Webmoney BL: ?
    Ну заливай файлы руками, и не будет проблем :)

    А так - пиши скрипт, или качни какой-нидь web-shell.
    Ну или как вариант напиши небольшой скрипт, который сменит права у всех твоих файлов, или у выбранных на 0777. После этого по-идее ты сможешь распоряжаться ими.
    • 0
  10. Дипломник
    • Регистрация: 06.11.2010
    • Сообщений: 142
    • Записей в дневнике: 4
    • Репутация: 13
    Такое у меня случалось, когда на аккаунте несколько сайтов и один сайт лежал в папке другого. И когда второй сайт заливался на хостинг из аккаунта первого, а потом заходил на фтп под именем второго юзера, то не получалось удалить и обновить файлы.
    • 0

Похожие темы

Темы Раздел Ответов Последний пост
Удаление ID новости в URL ( DLE )
Софт, скрипты, сервисы 4 28.08.2010 17:50
1 апреля и удаление доменов
Хостинг и Серверы 28 07.05.2010 04:35
Создание платных файлов программой zipus.ru
Партнерские программы 3 17.03.2010 05:48
Учим php+js: Загрузка файлов в стиле AJAX
Дайджест блогосферы 0 23.12.2009 17:58
Чем выдернуть урлы из кучи текстовых файлов?
Софт, скрипты, сервисы 11 08.09.2009 16:02

У кого попросить инвайт?

Вы можете попросить инвайт у любого модератора:

Информеры