Удаление папки /install/ - обязательно!

Файловый Архив

  • Неограниченное количество категорий и суб-категорий
  • Настройки прав доступа по группам
  • Настройки прав доступа по каждой категории
  • Предпросмотр медиа файлов: FLV, IFLV, F4A, F4V, MP4, MP3, MOV и других...
  • Мультизагрузка файлов - SWFUploader
  • Добавление файлов с сервера
Подробности и история обновлений продукта в этой теме
Loading

Go Back   форум vBSupport.org > > >
Register Изображения Меню vBsupport Files Manager Аллея Звёзд Реклама на форуме Search Today's Posts Mark Forums Read
  • Мемберка
  • Администраторам
  • Premoderation
  • For English speaking users
  • Изменения в правах
  • Каталог Фрилансеров
Пароли на скачивание файлов в Member Area меняются автоматически каждый день
Если вам нужно скачать какой то скрипт, за паролем ко мне в ЛС
привет какирам kerk
Ещё раз обращаем Ваше внимание: всё, что Вы скачиваете и устанавливаете на свой форум, Вы устанавливаете исключительно на свой страх и риск.
Сообщество vBSupport'а физически не в состоянии проверять все стили, хаки и нули, выкладываемые пользователями.
Помните: безопасность Вашего проекта - Ваша забота.
Убедительная просьба: при обнаружении уязвимостей или сомнительных кодов обязательно отписывайтесь в теме хака/стиля
Спасибо за понимание
На форуме введена премодерация ВСЕХ новых пользователей

Почта с временных сервисов, типа mailinator.com, gawab.com и/или прочих, которые предоставляют временный почтовый ящик без регистрации и/или почтовый ящик для рассылки спама, отслеживается и блокируется, а так же заносится в спам-блок форума, аккаунты удаляются
for English speaking users:
You may be surprised with restriction of access to the attachments of the forum. The reason is the recent change in vbsupport.org strategy:

- users with reputation < 10 belong to "simple_users" users' group
- if your reputation > 10 then administrator (kerk, Luvilla) can decide to move you into an "improved" group, but only manually

Main idea is to increase motivation of community members to share their ideas and willingness to support to each other. You may write an article for the subject where you are good enough, you may answer questions, you may share vbulletin.com/org content with vbsupport.org users, receiving "thanks" equal your reputation points. We should not only consume, we should produce something.

- you may:
* increase your reputation (doing something useful for another members of community) and being improved
* purchase temporary access to the improved category:
10 $ for 3 months. - this group can download attachments, reputation/posts do not matter.
20 $ for 3 months. - this group can download attachments, reputation/posts do not matter + adds eliminated + Inbox capacity increased + files manager increased permissions.

Please contact kerk or Luvilla regarding payments.

Important!:
- if your reputation will become less then 0, you will be moved into "simple_users" users' group automatically.*
*for temporary groups (pre-paid for 3 months) reputation/posts do not matter.
Не можете скачать вложение?
Изменения в правах групп пользователей
внимательно читаем эту и эту темы
Короткая версия - тут
Уважаемые пользователи!

На форуме открыт новый раздел "Каталог фрилансеров"

и отдельный раздел для платных заказов "Куплю/Закажу"

 
 
Первый пост
Old  
netwind
Гуру
 
netwind's Avatar
Default 0

Quote:
Originally Posted by SMak044 View Post
Делал, вставка значений в $_FILEAS не помогает, так же как и добавка значений в $_POST
Не помогает твоему коду заработать вместе с кодом vbulletin ? Вполне возможно.
Но обвинять в этом хостера еще рано. Если сделал - выложи этот тест. Скорее всего тест недостаточно изолированный. Хостеру нет никакой причины запрещать модифицировать суперглобальные переменные.
 
Bot
Yandex Bot Yandex Bot is online now
 
Join Date: 05.05.2005
Реклама на форуме А что у нас тут интересного? =)
Old  
SMak044
Эксперт
 
SMak044's Avatar
Default 0

netwind, Ты меня не понял, хостер ни при чем... Я тестирую локально, и у меня все включено, но проблема все равно остается. Проверку не проходит, как не модифицируй массивы... Вполне вероятно я не так это делаю, но все же думаю, что так и должно быть... Хотя ХЗ...
 
Old  
kerk
k0t
 
kerk's Avatar
Default 0

вобла к примеру тоже модифицирует глобальный массив $_FILES, перетасовывает ключи/значения в массиве (и по моему подпихивает какие то свои) и все работает =)
значит дело не в этом?
 
Old  
SMak044
Эксперт
 
SMak044's Avatar
Default 0

kerk, Проблема в том, что функция is_uploaded_file скорее всего проверяет не только массив $_FILES, потому что я этот массив модифицировал и назначал туда значения, скорее всего проверка идет и массива $_POST. Что там проверяет эта функция я не знаю, попробовал вставлять туда и контент_тип с бондари и файл_мах_сайз и комбинации разные и значение аплоад.... Все не то. Что то еще передается, что видно функции и не видно в массиве при просмотре $GLOBALS.
При добавлении файла через форму в акне управления вложениями, проверка проходится отлично, добавлял тот же файл, что и без форомы, снимал все состояние глобалс, потом модифицировал в моей функции массив глобал и делал его точно таким же и функция говорит, что файл не был закачан методом пост.

Короче устал я бороться с этой проблемой, а пошел путем, через закачку по ссылке. По нагрузке и по времени работы фактически потерь нет, а закачка с локального урла точно так же работает как и не с локального, впрочем какая разница...
 
Old  
kerk
k0t
 
kerk's Avatar
Default 1

Quote:
Originally Posted by SMak044 View Post
is_uploaded_file скорее всего проверяет не только массив $_FILES
эта функция проверяет загрузку файла методом пост и ищет файл в темп директории, а его там нет, т.к. грузим файл из соседней
я поэтому и предложил костыль
грузить файл в темп папку курлом а уже затем вобла сама его найдет там и все прокатит =)
 
Old  
SMak044
Эксперт
 
SMak044's Avatar
Default 1

kerk, В процессе загрузки файла есть 2 пути, это загрузить с диска через пост и загрузить с линка.
Это один и тот же класс, просто в параметрах или ссылка или массив. сначала идет проверка массив ли это если да то идет загрузка временного файла, который мы получили через форму методом пост, если это линк, то класс закачивает сам с указанного линка в директорию временных файлов.

Задача стоит довольно простая. У меня есть текст сообщения и файлы с ним связанные... Это файл eml (почтовое сообщение) Которое я разбираю и мне надо прикрепить к сообщению вложения.
Почтовый файл я разбираю и имею в некой папке файлы вложений. Вот мне их и надо добавить.
То есть у меня есть уже вся информация о имени файла, о полном пути к нему о его размере. Потому мне ничего не стоит собрать массив $_FILES так как мне надо. Функция проверки проверяет наличие файла по полному пути к временному файлу, который передается в элементе tmp_name. вот именно так я и пробовал прикреплять файлы, но проверку пройти мне не удалось. Хочу заметить, что файлы при разборе письма я выкладывал так же и в каталог временных файлов, это не помогло.

Второй путь оказался проще. Каталог временных файлов вложений из письма я сделал в каталоге доступном по http на том же сайте, и просто передаю в класс не массив, а ссылку на этот временный файл, предварительно убрав из файла пробелы. Класс сам загрузит файл и сформирует нужный массив для дальнейшей обработки.

То есть загружать файл по сути не нужно, нужно просто сделать доступной по http или ftp папку с файлами, которые мы хотим добавить как вложения. и отдать классу линк.
 
Old  
SMak044
Эксперт
 
SMak044's Avatar
Default 3

Отчет о проделанной работе...
И так у нас есть некие файлы, которые мы хотим добавить как вложения к сообщению. Само id сообщения мы можем указать вручную, или мы можем его создать прямым запросом с помощью скрипта. Рассмотрим вопрос создания прямым запросом.
  1. У нас есть
    1. Текст сообщения
    2. ID пользователя от которого мы будем размещать сообщение
    3. Тема сообщения (может и не быть) (для создания первого сообщения в теме, обязательно)
    4. Список файлов, находящихся в папке к которой мы имеем доступ по http или ftp
  2. Создание сообщения
    PHP Code:
        $title 'Тема сообщения';
        
    $pagetext 'Текст сообщения';
        
    $yes 1;
        
    $visible 1;
        
    $foruminfo fetch_foruminfo($forumid);
        
    $userid $posteduserid;
        
    $userinfo fetch_userinfo($userid);  
        
    $username $userinfo['username'];
        
        
    // Если $newthread = true то это новая тема
        
    if($newthread)
        {
          
    $threaddm = new vB_DataManager_Thread_FirstPost($vbulletinERRTYPE_ARRAY);
          
    $threaddm =& datamanager_init('Thread_FirstPost'$vbulletinERRTYPE_ARRAY'threadpost');
          
    $threaddm->set('forumid'$forumid);
          
    $threaddm->set('userid'$userid);
          
    $threaddm->set('title'$title);
          
    $threaddm->set('pagetext'$pagetext);
          
    $threaddm->set('allowsmilie'$yes);
          
    $threaddm->set('visible'$visible);
          
    $threaddm->set('sticky''0');
          
    $threaddm->set('open''1');
          
    $threaddm->set_info('forum'$foruminfo);
          
    $threaddm->pre_save();
          
    $threadid $threaddm->save();

          
    build_thread_counters($threadid);
          
    build_forum_counters($forumid);

          
    $threadinfo fetch_threadinfo($threadid);
          
    $postid $threadinfo['firstpostid'];

          
    build_post_index($postid$foruminfo);
          
    build_user_statistics();
        }
        else
        {
          
    $threaddm = new vB_DataManager_Post($vbulletinERRTYPE_STANDARD);
          
    $threaddm->do_set('threadid',$threadid);
          
    $threaddm->do_set('userid'$userid);
          
    $threaddm->do_set('username'$username);
          
    $threaddm->do_set('pagetext'$pagetext);
          
    $threaddm->do_set('title'$title);
          
    $threaddm->do_set('visible'$visible);
          
    $threaddm->do_set('allowsmilie'$yes);
          
    $threaddm->do_set('dateline'$date);
          
    $threaddm->do_set('message_id'$message_id);
          
    $threaddm->do_set('parentid'$parentid); // если вы знаете на какой пост будет ответ
          
    $threaddm->pre_save();
          
    $postid $threaddm->save(); 
          
          
    build_thread_counters($threadid);
          
    build_forum_counters($forumid);  
          
    build_post_index($postid$foruminfo);
          
    build_user_statistics();
        }
      } 
  3. Вставка файлов
    В массиве $filetoattach наш список файлов array('имя файла' => array('tmp_name' => 'полный путь к файлу для операций с файлами', 'size' => 'Размер файла полученный заранее')).
    PHP Code:
    foreach($filetoattach As $filename => $filearr)
    {
      
    $file['name']     = $filename;
      
    $file['tmp_name'] = $filearr['bodyfile'];
      
    $file['size']     = $filearr['bodylenght'];  
        
      
    $linksource $vbulletin->options['bburl'] . '/tmp/'// Это начало ссылки на файл
          
      
    if(!$resultattach my_attach_files($file$postid$linksourcetrue))
      {
        
    unlink($file['tmp_name']);
      }
    }
      
    function 
    my_attach_files($file$postid$linksource ''$fileunlink false)
    {
      global 
    $vbulletin;

      if(    empty(
    $postid
          OR 
    $postid == 0
          
    OR empty($file['name']) 
          OR 
    $file['name'] == '' 
          
    OR empty($file['tmp_name']) 
          OR 
    $file['tmp_name'] == ''
          
    OR !file_exists($file['tmp_name']) 
          OR empty(
    $file['size'])
          OR 
    $file['size'] == ''
          
    OR $file['size'] == 0
        
    )
      {
        return 
    false;
      }

      
    $filename    $file['name'];
      
    $oldtmp_name $file['tmp_name'];
      
    $renamed     false;
        
      if(
    preg_match('/\s/si'$filename)) 
      {
        
    preg_match('/(.*?)(' $filename ')/usi'$file['tmp_name'], $regs);
        
    $temppath $regs[1];
        
    $newfilename preg_replace('/\s/usi''_'$filename);
        
    $newfile $temppath $newfilename;
            
        if(
    $fileunlink)
        {
          
    rename($file['tmp_name'], $newfile);    
        }
        else
        {
          
    copy($file['tmp_name'], $newfile);
          
    $renamed true;
        }
        
        
    $file['name']     = $newfilename;
        
    $file['tmp_name'] = $newfile;
      } 

      
    $attachment $linksource $file['name'];
      
    $headers = @get_headers($attachment);

      if(!
    preg_match('/200/si'$headers[0])) 
      {
        if(
    $fileunlink AND $file['tmp_name'] != $oldtmp_name)
        {
          
    rename($file['tmp_name'], $oldtmp_name);    
        }
        elseif(!
    $fileunlink AND $renamed)
        {
          
    unlink($file['tmp_name']);
        }    
        
        return 
    false;
      }

      
    $sqlpost $vbulletin->db->query_first("
        SELECT post.threadid 
             , post.userid
             , thread.forumid
             , post.dateline
             , post.visible
        FROM " 
    TABLE_PREFIX "post as post
        INNER JOIN " 
    TABLE_PREFIX "thread as thread
        ON post.threadid = thread.threadid
        WHERE post.postid = " 
    $postid ."
        "
    ); 
      
      if(!
    $sqlpost)
      {
        return 
    false;
      }

      
    $userid $sqlpost['userid'];
      
    $userinfo fetch_userinfo($userid);  
      
    cache_permissions($userinfotrue);
      
    $extension strtolower(file_extension($file['name']));
      
    $inserttype 'attach';
      
      if(empty(
    $userinfo['attachmentpermissions']["$extension"]['permissions']))
      {
        
    $inserttype 'external';
      }
      else
      {
        if(
    $file['size'] >= $userinfo['attachmentpermissions']["$extension"]['size'])
        {
          
    $inserttype 'external';
        }  
      }

      if(
    $inserttype == 'attach')
      {
        require_once(
    DIR '/includes/functions_newpost.php');
        require_once(
    DIR '/includes/functions_file.php');
          require_once(
    DIR '/includes/class_upload.php');
          require_once(
    DIR '/includes/class_image.php');  

        
    $forumid              $sqlpost['forumid'];
        
    $foruminfo            fetch_foruminfo($forumid);
        
    $dateline             $sqlpost['dateline'];
        
    $posthash             md5($dateline $userinfo['userid'] . $userinfo['salt']);
        
    $postinfo['postid']   = $postid;
        
    $postinfo['userid']   = $userid;
        
    $threadid             $sqlpost['threadid'];
        
    $postinfo['threadid'] = $threadid;
        
    $postinfo['posthash'] = $posthash;
        
    $postinfo['visible']  = $sqlpost['visible'];  
      
        
    $attachdata =& datamanager_init('Attachment'$vbulletinERRTYPE_ARRAY);
          
    $upload = new vB_Upload_Attachment($vbulletin);
          
    $image =& vB_Image::fetch_library($vbulletin);
          
    $upload->data      =& $attachdata;
          
    $upload->image     =& $image;
          
    $upload->foruminfo =& $foruminfo;
          
    $upload->userinfo  =& $userinfo;
          
    $upload->emptyfile false;
          
    $upload->postinfo  =& $postinfo;
      
        if(
    $attachmentid $upload->process_upload($attachment))
        {
          
    my_attach_file_to_post($attachmentid$postid$threadid);
          
    $resultattach = array(
              
    'type'          => 'attach',
              
    'attachmentid'  => $attachmentid,
              
    'link'          => 'attachment.php?attachmentid=' $attachmentid
          
    );  
        }
        else
        {
          
    $inserttype 'external';
        }  
      }

      if(
    $inserttype == 'external')
      {
        return 
    false;  
      }

      if(
    $fileunlink)
      {
        
    unlink($file['tmp_name']);
      }
      else
      {
        if(
    $renamed)
        {
          
    unlink($file['tmp_name']);
        }  
      }
     
      return 
    $resultattach;
    }

    function 
    my_attach_file_to_post($attachmentid$postid$threadid)
    {
      global 
    $vbulletin;

        
    $vbulletin->db->query_write("
        UPDATE " 
    TABLE_PREFIX "attachment
        SET postid = " 
    $postid "
        WHERE attachmentid = " 
    intval($attachmentid) . "
        "
    );
      
        
    $sqlcountattach $vbulletin->db->query_first("
        SELECT count(*) AS countattach
        FROM " 
    TABLE_PREFIX "attachment as attachment
        WHERE attachment.postid = " 
    intval($postid) . "
        GROUP BY attachment.postid
        "
    );  

      
    $countattach intval($sqlcountattach['countattach']);

        
    $vbulletin->db->query_write("
        UPDATE " 
    TABLE_PREFIX "post
        SET attach = " 
    $countattach "
        WHERE postid = " 
    intval($postid) . "
        "
    );  

        
    $sqlattachthread $vbulletin->db->query_first("
        SELECT thread.attach
        FROM " 
    TABLE_PREFIX "thread as thread
        WHERE thread.threadid = " 
    intval($threadid) . "
        "
    );  

      
    $attachthread intval($sqlattachthread['attach']) + 1;

        
    $vbulletin->db->query_write("
        UPDATE " 
    TABLE_PREFIX "thread
        SET attach = " 
    $attachthread "
        WHERE threadid = " 
    intval($threadid) . "
        "
    );


В общем то все... Пользуйтесь...

В функции есть часть связанная с размещением вложений на внешних ресурсах
PHP Code:
  if($inserttype == 'external')
  {
    return 
false;  
  } 
Ее можно удалить, это так для развития в будущем.
 
 

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off




All times are GMT +4. The time now is 08:30 PM.


Powered by vBulletin® Version 3.0.9
Copyright ©2000 - 2016, Jelsoft Enterprises Ltd.