Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не удается удалить файл рисунок по FTP 
:(
    Опции темы
alexplato
Дата 26.11.2010, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 81
Регистрация: 14.11.2010

Репутация: нет
Всего: нет



Мой скрипт заливает рисунки с удаленного сервера себе на сайт. Но после этого удалить рисунки становится невозможно (и изменить атрибуты самих рисунков тоже). Кто нибудь сталкивался с подобной ситуацией? 

Ниже приведена моя функция, которая вытягивает изображения к себе на хост. Может код поможет прояснить ситуацию.

Код

/**
 * Сохраняем все изображения в тексте
 *
 * 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;
}

PM MAIL   Вверх
Warpkid
Дата 26.11.2010, 19:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 26.4.2008

Репутация: 3
Всего: 3



Цитата

Но после этого удалить рисунки становится невозможно..


Удалить как? Напрямую через фтп, или через пхп-скрипт?

Попробуй сравнить имена пользвателей, под которым ты запускаешь скрипт и коннектишься по фтп, возможно у фтп-пользователя нет пермишнов.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0449 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.