Изменение файла при загрузке его на сервер

mulekula

Постоялец
Регистрация
6 Дек 2008
Сообщения
91
Реакции
2
С помощью этого скрипта загрузки, я загружаю торрент файлы на сервер
Как сделать чтобы при загрузке добавлялся мой announce

PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Windows-1251">
</head>
<body>
	<form method="post" enctype="multipart/form-data">
		<p>Завантаження <b>Torrent</b> файлу:</p>
	   <input name="file" size="18" type="file" value="" size="1" style="height:20; width:100;">
	   <input name="submit" type="submit" value="Завантажити" size="1" style="height:20;">
	</form>
	<div align='left'>
	<?
	$file = $_FILES['file']['tmp_name'];
	$filename = $_FILES['file']['name'];
	if(!empty($file))
	{
		ini_set('memory_limit', '32M');
		$maxsize = "2500096";
		$extentions = array("torrent");
			
		$size = filesize ($_FILES['file']['tmp_name']);
		$type = strtolower(substr($filename, 1 + strrpos($filename, ".")));
		$new_name = '[MySite.ru]-File-'.time().'.'.$type;

		if($size > $maxsize)
		{
	 		echo "Файл більше 250KB зменшіть розмір файлу або зверніться за допомогою на форум. <br><a href='' onClick=window.close();>Закрити вікно</a>";
		}
	    elseif(!in_array($type,$extentions))
	    {
	    	echo '<b>Недоступний тип файлу</b>. Дозволено завантажувати тільки файли з розширенням .torrent <br>';
	    }
		else 
		{
			if (copy($file, "/home/a6457370/public_html/uploads/".$new_name))
				echo "Файл завантажено!<br>Скопіюйте адресу файлу та вставте у відповідну форму. <br><a href=\"uploads/$new_name\"><b>http://mysite.ru/uploads/$new_name</b></a><br>та натисніть<br><a href='' onClick=history.back();>Повернутись назад</a>";
			else echo "Файл не завантажено!.";
		}
		
	}
	?>
	</div>
</body>
</html>
 
Не соизволили бы немного поподробнее рассказать, что же это за такая штука интересная, которую вы называете "announce" ??

На всяк-случ привожу цитату с вики протокола BitTorrent:

Анонс (англ. announce) — обращение клиента к трекеру посредством HTTP-GET-запроса. При каждом анонсе клиент передаёт на трекер информацию об объёмах им скачанного и отданного, a трекер передаёт клиенту список адресов других клиентов. Обращение клиента к трекеру происходит через определённые интервалы времени, которые определяются настройками клиента и трекера.
 
Извините что неправильно выразился.
Скрипт должен добавлять в список трекеров мой трекер:

_http://mysite:80/announce
 
качаешь класс для работы с форматом торрент файлов (bencode)

и делаешь примерно так: (в примере я использовал первую библиотеку)
PHP:
require_once './BEncoder.inc.php';
$my_tracker_url = 'http://ya.ru/';
$torr_filename = 'http://torrents.thepiratebay.org/6687573/Rurouni_Kenshin_-_Artbook_(825x1200)_[JPG]_TNT_Village.6687573.TPB.torrent';
$new_torr_filename = './456.torrent';
// Read torrent file
$torr_data = @file_get_contents($torr_filename);
if ($torr_data!==false && !empty($torr_data))
{
    try {
        $encoder = new BEncoder ();
        // decode input torrent file
        $torr_array = $encoder->decode ($torr_data);
        if (!isset($torr_array["announce-list"]))
        {// if torrent dont have list, create it and add to it main announcer
            $torr_array["announce-list"][] = array($torr_array["announce"]);
        }
        // add new tracker
        $torr_array["announce-list"][] = array($my_tracker_url);
        $new_torr = $encoder->encode($torr_array);
        if (!file_put_contents($new_torr_filename,$new_torr))
        {
            echo 'cant write new torrent file <b>' . $new_torr_filename . '</b>';
        }
    } catch (Exception $e) {
        echo 'wrong format in torrent file <b>' . $torr_filename . '</b>:<br /><b>'. $e->getMessage() .'</b>';
    }
}
else
{
    echo ('Cannot load file <b>' . $torr_filename . '</b>');
}
чтобы наглядно в виде дерева поглядеть что такое структура торрент-файла и поредактировать есть отличная виндовая утилитка bencode editor
 
Возможно ли сделать условия типа: Если трекер прописан так
udp://bt.sitename.org:2710
то автоматически добавить к нему
udp://bt.sitename.org:2710/announce
 
Возможно ли сделать условия типа: Если трекер прописан так
udp://bt.sitename.org:2710
то автоматически добавить к нему
udp://bt.sitename.org:2710/announce
конечно можно..
просто учитывай что если анонс-ссылка одна, то она хранится только в "announce"
а если несколько, то все они хранятся в списке "announce-list" (для совместимсти главная еще и в "announce")

поэтому алгоритм следующий -
1) проверяешь "announce" на нужную тебе ссылку, если подходит - меняешь ее
2) если существует "announce-list" то повторяешь предыдущую операцию на каждом анонсере из этого списка.
3) сохраняешь изменения
 
я php только начал изучать и на данный момент не очень представляю как сделать эту проверку ...
Не могли бы вы показать некий пример?


помогите разобраться с этим вопросом пожалуйста
 
вот этот код добавляет к каждой анонс-ссылке слово "/announce"
PHP:
require_once './BEncoder.inc.php'; 
$my_tracker_url = 'http://ya.ru/'; 
$torr_filename = 'http://torrents.thepiratebay.org/6687573/Rurouni_Kenshin_-_Artbook_(825x1200)_[JPG]_TNT_Village.6687573.TPB.torrent'; 
$new_torr_filename = './456.torrent'; 
// Read torrent file 
$torr_data = @file_get_contents($torr_filename); 
if ($torr_data!==false && !empty($torr_data)) 
{ 
    try { 
        $encoder = new BEncoder (); 
        // decode input torrent file 
        $torr_array = $encoder->decode ($torr_data); 
        // replace/correct announcer
        $torr_array["announce"] = $torr_array["announce"] . "/announce";
        if (isset($torr_array["announce-list"])) 
        {
            foreach ($torr_array["announce-list"] as $num=>$announce)
            {
                $torr_array["announce-list"][$num][0] = $announce[0] . "/announce"; 
            }
        }
        $new_torr = $encoder->encode($torr_array); 
        if (!file_put_contents($new_torr_filename,$new_torr)) 
        { 
            echo 'cant write new torrent file <b>' . $new_torr_filename . '</b>'; 
        } 
    } catch (Exception $e) { 
        echo 'wrong format in torrent file <b>' . $torr_filename . '</b>:<br /><b>'. $e->getMessage() .'</b>'; 
    } 
} 
else 
{ 
    echo ('Cannot load file <b>' . $torr_filename . '</b>'); 
}

upd - исправил, первый раз писал без проверки, прямо в пост.
 
все работает прекрасно! знаю что много прошу но не могли бы вы мне еще ​​помочь сделать проверку.

Если / announce присутствует добавлять не нужно
Если / announce отсутствует добавить его (это вы уже реализовали)

т.е. на данный момент скрипт добавляет /announce даже если он уже присутствует
 
вот. хотя мог бы и поднапрячь свой мозг и гугл...
PHP:
require_once './BEncoder.inc.php'; 
$my_tracker_url = 'http://ya.ru/'; 
$torr_filename = 'http://torrents.thepiratebay.org/6687573/Rurouni_Kenshin_-_Artbook_(825x1200)_[JPG]_TNT_Village.6687573.TPB.torrent'; 
$new_torr_filename = './456.torrent'; 
// add to announce links which not have that ending
$end = "/announce";
// Read torrent file 
$torr_data = @file_get_contents($torr_filename); 
if ($torr_data!==false && !empty($torr_data)) 
{ 
    try { 
        $encoder = new BEncoder (); 
        // decode input torrent file 
        $torr_array = $encoder->decode ($torr_data); 
        // replace/correct announcer
        if ( substr( $torr_array["announce"], -strlen($end) ) != $end )
        {
            $torr_array["announce"] = $torr_array["announce"] . $end;
        }
        if (isset($torr_array["announce-list"])) 
        {
            foreach ($torr_array["announce-list"] as $num=>$announce)
            {
                if ( substr( $torr_array["announce-list"][$num][0], -strlen($end) ) != $end )
                {
                    $torr_array["announce-list"][$num][0] = $announce[0] . $end; 
                }
            }
        }
        $new_torr = $encoder->encode($torr_array); 
        if (!file_put_contents($new_torr_filename,$new_torr)) 
        { 
            echo 'cant write new torrent file <b>' . $new_torr_filename . '</b>'; 
        } 
    } catch (Exception $e) { 
        echo 'wrong format in torrent file <b>' . $torr_filename . '</b>:<br /><b>'. $e->getMessage() .'</b>'; 
    } 
} 
else 
{ 
    echo ('Cannot load file <b>' . $torr_filename . '</b>'); 
}
 
Назад
Сверху