Студия креативных разработок DevArt.PRO.
Разработка сайтов и форумов под ключ!
Сильнейшая команда в России по vBulletin - читать подробнее...
 
 
 
 

 
 
Здесь скоро опять что то будет...
 
 
 
 
 
 
Loading

Вернуться   форум vBSupport.org > vBSupport.org > Гурушник > Кодер

Объявления
  • Изменения в правах
  • Каталог Фрилансеров
  • Добро пожаловать!
  • Premoderation
  • Новичкам!
  • For English speaking users
Ответ
 
Опции темы Опции просмотра
Старый 01.03.2010, 16:18   #1
io.sys
 
Аватар для SAS1024
Question Прикрепление файла к сообщению с помощью vb API

Собс-но, возникла необходимость скриптом добавить в существующее сообщение некое вложение с помощью загрузки по URL.

Поглядел файлик newattachment.php, полистал class_upload.php. Много думал, многого не понял.

Скажите, быть может кто-то уже реализовывал подобную вещь, или хотя бы разбирался с vB_Upload_Attachment ?
  Ответить с цитированием
Рекламка
Реклама на форуме

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

  • Неограниченное количество категорий и суб-категорий
  • Тонкие настройки прав доступа
  • Предпросмотр медиа файлов: FLV, IFLV, F4A, F4V, MP4, MP3, MOV и других...
  • Мультизагрузка файлов - SWFUploader
  • Добавление файлов с сервера
Подробности и история обновлений продукта в этой теме
Старый 01.03.2010, 16:36   #2
Fedcomp
На доске почёта
клон maJic
 
banned nax
SAS1024, а редактирование сообщения не вариант? Просто не понял сути как таковой, вроде всё возможно штатными средствами.
  Ответить с цитированием
Старый 01.03.2010, 16:51   #3
SAS1024
io.sys
 
Аватар для SAS1024
Fedcomp, представь что у тебя есть 1000 тем и 1000 файлов к каждой теме, которые находятся на другом сервере. Употеешь прицеплять всё ручками.
  Ответить с цитированием
Старый 03.03.2010, 00:56   #4
Андрюшкин
Продвинутый
 
Аватар для Андрюшкин
если я правильно понял то алгоритм будет выглядеть так:
1. получаем айди юзера и айди сообщения
2. создаем запись в бд о новом вложении исходя из данных п1
3. заливаем физически файл (чем и как заливаем скриптом, фтп или ручкам дело вкуса) в директорию
/путь_к_форуму/папка_атачей/u/s/e/r/i/d/$attachid.attach

ну вот как-то так)
  Ответить с цитированием
Старый 03.03.2010, 02:27   #5
netwind
Гуру
 
Аватар для netwind
Андрюшкин, неправильно понял. api вообще и datamanager-ы в частности используют для создания долгоживущего кода.
вот, например, если форум хранит вложения в базе, кто будет это переписывать? а файл закачанный через api должен переварить любые настройки.
SAS1024, ну полно же примеров на орге и в чужих хаках, а ты пишешь так, как будто вообще негде посмотреть . начни отсюда http://www.vbulletin.org/forum/showt...oad_Attachment.
  Ответить с цитированием
Старый 03.03.2010, 08:31   #6
SAS1024
io.sys
 
Аватар для SAS1024
netwind, вообще, везде идут примеры с загрузкой с помощью $_FILES. Я же хотел загрузить файлы с URL.

Поясню что я хочу сделать:
Я хочу сконвертировать раздачи из движка торрент-трекера TBDev в вобловский VBTT.

У меня есть на сервере папка /www/tor/.
В ней лежит куча *.torrent файлов от TBDev.

В БД есть TBDev-таблица torrents с полями:
name - название раздачи
filename - имя торрент-файла у раздачи
category - раздел TBDev в которой находится раздача.

Далее я набросал вот такой скрипт, который помог бы мне с переносом торрент-файлов в аттачи к предварительно созданным темам
PHP код:

// тут код коннекта к БД, который стандартен и никому не интересен.

// category TBDev -> forumid vBulletin. Настраиваем соответствие разделов TBDev и разделов воблы.
$forums = array(=> 7110 => 72=> 7344 => 8341 => 74=> 7543 => 7638 => 8527 => 7740 => 8629 => 7833 => 7916 => 8425 => 80=> 8142 => 82);

$rc mysql_query("SELECT name, filename FROM torrents WHERE name <> '' ORDER BY name");

if (
mysql_num_rows($rc))
{
    while (
$torrentslist mysql_fetch_array($rc))
    {
        
$torrents[] = $torrentslist;
    }
}
// получили массив $torrents, в котором содержатся поля name и filename

$cwd getcwd();
chdir($_SERVER['DOCUMENT_ROOT'].'/f');
require_once(
'./global.php');
require_once(
'./includes/class_dm.php');
require_once(
'./includes/class_dm_threadpost.php');
require_once(
'./includes/functions_databuild.php');

// для каждого элемента массива $torrents получаем ID темы и ID первого сообщения в теме.
foreach($torrents as $torrent)
{
$thread_info mysql_query("SELECT threadid, firstpostid FROM vb_thread WHERE title = '".mysql_real_escape_string($torrent['name'])."' AND forumid = ".$forums[$torrent[category]]);

if (
mysql_num_rows($thread_info))
{
$threadid mysql_result($thread_info,0,"threadid");
$postid mysql_result($thread_info,0,"firstpostid");
}
else
{
$threadid 0;
$postid 0;
}

$postinfo verify_id('post'$postid01);
$threadinfo verify_id('thread'$threadid01);
$foruminfo verify_id('forum'$forums[$torrent[category]], 01);

if (
$threadid)
{
require_once(
'./includes/functions_file.php');
require_once(
'./includes/class_upload.php');

// в $url пихаем ссылку на торрент-файл.

$url "http://www.old-games.ru/tor/".rawurlencode($torrent['filename']);
$vbulletin->GPC['attachment']['name']["1"] = $url;
$vbulletin->GPC['attachment']['url']["1"] = true;

if (
$postid)  // Editing a post
{
    
$userinfo fetch_userinfo($postinfo['userid']);
    
$postinfo['posthash'] =& $posthash;
}
else
{
    
$postinfo = array('posthash' => $posthash);
}

// These are created each go around to insure memory has been freed
$attachdata =& datamanager_init('Attachment'$vbulletinERRTYPE_ARRAY);
$upload =& new vB_Upload_Attachment($vbulletin);

$upload->data =& $attachdata;
$upload->emptyfile false;
$upload->foruminfo =& $foruminfo;
$upload->postinfo =& $postinfo;
$upload->userinfo =& $userinfo;
$attachment =& $vbulletin->GPC['attachment']['name']["1"];

//пытаемся залить данный файл...

if ($attachmentid $upload->process_upload($attachment))
{
        
$postinfo['attachmentid'] =& $attachmentid;
        
$postinfo['forumid'] =& $foruminfo['forumid'];
        echo 
$torrent['filename']." (".$attachmentid.") done!<br />";
}

//парсим на возникшие ошибки
if ($error $upload->fetch_error())
{
    
$errors[] = array(
        
'filename' => is_array($attachment) ? $attachment['name'] : $attachment,
        
'error'    => $error,
    );
}
if (!empty(
$errors))
{
    
$errorlist '';

//выводим возникшие ошибки
    
foreach ($errors AS $error)
    {
        
$filename htmlspecialchars_uni($error['filename']);
        
$errormessage $error['error'];
        print 
$errormessage" ".$filename."<br />";
    }

}
unset(
$errors);

}
}
chdir($cwd); 
В результате я получаю ошибки вида:
Некорректный файл $filename

В чем ошибка, я пока не понял, т.к. когда я пытаюсь вручную, прицепить аттач через любой из URL-ов, то всё проходит нормально :/
  Ответить с цитированием
Ответ

Закладки

Метки
api, загрузка файлов

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.



 
 

Текущее время: 19:16 25.05.2012. Часовой пояс GMT +4.


Powered by vBulletin® Version 3.7.0
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd. Перевод: zCarot