netwind, вообще, везде идут примеры с загрузкой с помощью $_FILES. Я же хотел загрузить файлы с URL.
Поясню что я хочу сделать:
Я хочу сконвертировать раздачи из движка торрент-трекера TBDev в вобловский VBTT.
У меня есть на сервере папка /www/tor/.
В ней лежит куча *.torrent файлов от TBDev.
В БД есть TBDev-таблица
torrents с полями:
name - название раздачи
filename - имя торрент-файла у раздачи
category - раздел TBDev в которой находится раздача.
Далее я набросал вот такой скрипт, который помог бы мне с переносом торрент-файлов в аттачи к предварительно созданным темам
PHP код:
// тут код коннекта к БД, который стандартен и никому не интересен.
// category TBDev -> forumid vBulletin. Настраиваем соответствие разделов TBDev и разделов воблы.
$forums = array(1 => 71, 10 => 72, 4 => 73, 44 => 83, 41 => 74, 9 => 75, 43 => 76, 38 => 85, 27 => 77, 40 => 86, 29 => 78, 33 => 79, 16 => 84, 25 => 80, 5 => 81, 42 => 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', $postid, 0, 1);
$threadinfo = verify_id('thread', $threadid, 0, 1);
$foruminfo = verify_id('forum', $forums[$torrent[category]], 0, 1);
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', $vbulletin, ERRTYPE_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-ов, то всё проходит нормально :/