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

Тема в разделе "PHP", создана пользователем mulekula, 16 сен 2011.

Модераторы: latteo
  1. mulekula

    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>
     
  2. steel_HILL

    steel_HILL Постоялец

    Регистр.:
    15 апр 2010
    Сообщения:
    53
    Симпатии:
    14
    Не соизволили бы немного поподробнее рассказать, что же это за такая штука интересная, которую вы называете "announce" ??

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

     
  3. mulekula

    mulekula Постоялец

    Регистр.:
    6 дек 2008
    Сообщения:
    91
    Симпатии:
    2
    Извините что неправильно выразился.
    Скрипт должен добавлять в список трекеров мой трекер:

    _http://mysite:80/announce
     
  4. kardanchik

    kardanchik Писатель

    Регистр.:
    10 сен 2011
    Сообщения:
    4
    Симпатии:
    3
    качаешь класс для работы с форматом торрент файлов (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
    http://sites.google.com/site/ultimasites/bencode-editor
     
    mulekula нравится это.
  5. mulekula

    mulekula Постоялец

    Регистр.:
    6 дек 2008
    Сообщения:
    91
    Симпатии:
    2
    Возможно ли сделать условия типа: Если трекер прописан так
    udp://bt.sitename.org:2710
    то автоматически добавить к нему
    udp://bt.sitename.org:2710/announce
     
  6. kardanchik

    kardanchik Писатель

    Регистр.:
    10 сен 2011
    Сообщения:
    4
    Симпатии:
    3
    конечно можно..
    просто учитывай что если анонс-ссылка одна, то она хранится только в "announce"
    а если несколько, то все они хранятся в списке "announce-list" (для совместимсти главная еще и в "announce")

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

    mulekula Постоялец

    Регистр.:
    6 дек 2008
    Сообщения:
    91
    Симпатии:
    2
    я php только начал изучать и на данный момент не очень представляю как сделать эту проверку ...
    Не могли бы вы показать некий пример?


    помогите разобраться с этим вопросом пожалуйста
     
  8. kardanchik

    kardanchik Писатель

    Регистр.:
    10 сен 2011
    Сообщения:
    4
    Симпатии:
    3
    вот этот код добавляет к каждой анонс-ссылке слово "/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 - исправил, первый раз писал без проверки, прямо в пост.
     
    mulekula нравится это.
  9. mulekula

    mulekula Постоялец

    Регистр.:
    6 дек 2008
    Сообщения:
    91
    Симпатии:
    2
    все работает прекрасно! знаю что много прошу но не могли бы вы мне еще ​​помочь сделать проверку.

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

    т.е. на данный момент скрипт добавляет /announce даже если он уже присутствует
     
  10. kardanchik

    kardanchik Писатель

    Регистр.:
    10 сен 2011
    Сообщения:
    4
    Симпатии:
    3
    вот. хотя мог бы и поднапрячь свой мозг и гугл...
    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>'); 
    }
     
    mulekula нравится это.