Страница с демо записями

Тема в разделе "Общие вопросы", создана пользователем mazil0, 19 дек 2011.

  1. mazil0

    mazil0

    Сообщения:
    84
    Симпатии:
    5
    Здравствуйте.

    А как мне сделать страницу, чтобы все демки записанные через sourcetv автоматом выкладывались на созданную мной страницу.

    Где то я видел у вас эту тему, но не нашёл. :)
     
  2. LEII4A

    LEII4A

    Сообщения:
    631
    Симпатии:
    116
    Оффтоп
    а если по теме, то написал бы что у тебя установлено и какая у тебя ОС. Например у меня Linux, установлен веб-сервер apache и если нужно хранилище демок, то делается это созданием симплинка с папки с демками на папку www
    PHP:
    ln -/путь_к_папке/demos /var/www
     
    NagarD нравится это.
  3. Besenok_Kid

    Besenok_Kid

    Сообщения:
    227
    Симпатии:
    63
    Для Linux. Тестировалось на Ubuntu.
    Скрипт для архивации файлов с расширением dem и переноса в указанную папку. Демки хранятся три недели. Все регулируется в скрипте.
    Скрипт кладется в любое место, так как пути для архивации и переноса указываются в скрипте. Для того, чтобы скрипт постоянно запускался, добавьте в crontab.
    #!/bin/bash
    ##
    ## Скрипт архивирует демки, складывает в отдельный
    ## каталог и удаляет старые [c] CL0NE
    ##

    PATH_TO_DEMOS[0]="/home/kid/servers/new-serv/css/cstrike/";
    PATH_TO_DEMOS[1]="/home/kid/servers/new-serv/css/cstrike/";
    PATH_TO_DEMOS[2]="/home/kid/servers/new-serv/css/cstrike/";

    OUT_PATH[0]="/home/kid/servers/new-serv/css/cstrike/demos1";
    OUT_PATH[1]="/home/kid/servers/new-serv/css/cstrike/demos1";
    OUT_PATH[2]="/home/kid/servers/new-serv/css/cstrike/demos1";

    OLDER_THAN=21;

    IFS=$'\n'

    echo
    echo "[ Removing old and archiving new demos ]"
    echo

    for (( i = 0; i < "${#PATH_TO_DEMOS[@]}"; ++i));
    do
    DIR=${PATH_TO_DEMOS[$i]};
    OUT=${OUT_PATH[$i]};

    echo "Dir: $DIR";
    echo "Out: $OUT";

    find "$DIR" -name '*.dem' -mtime +$OLDER_THAN -exec rm {} \;
    find "$OUT" -name '*.gz' -mtime +$OLDER_THAN -exec rm {} \;

    echo "Cleaned";

    mkdir -p $OUT

    for file in `find "$DIR" -mmin +1 -name '*.dem' -print`
    do
    gzip -9 $file
    echo " `basename $file`"
    mv -ft "$OUT" "$file".gz
    done

    echo "Archived";
    echo

    done

    ##
    ##
    Скрипт PHP.
    Закиньте этот скрипт на веб сервер. Этот скрипт берет эти демки с папки куда складываются архивы. Целесообразно закинуть в sourcebans и добавить в меню sourceban кнопку демки, указав путь к скрипту. По сути не важно, где лежит этот скрипт на веб сервере.
    <?php

    /*

    Simple "SRCDS Demos archive" databaseless script

    Copyright (C) 2011 CL0NE



    This program is free software: you can redistribute it and/or modify

    it under the terms of the GNU General Public License as published by

    the Free Software Foundation, either version 3 of the License, or

    (at your option) any later version.



    This program is distributed in the hope that it will be useful,

    but WITHOUT ANY WARRANTY; without even the implied warranty of

    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the

    GNU General Public License for more details.



    You should have received a copy of the GNU General Public License

    along with this program. If not, see <http://www.gnu.org/licenses/>.

    */





    /*

    Configure server archives



    [subfolder name without trailing '/']

    title = [server title]

    prefix = [demo file prefixes without trailing '-']



    */

    $servers = array (

    '/home/kid/servers/new-serv/css/cstrike/demos1' => array(

    "title" => "CYBERVOLGA.Com Public Server #3",

    "prefix" => "auto"

    ),



    '/home/kid/servers/new-serv/css/cstrike/demos2' => array(

    "title" => "CYBERVOLGA.Com Public Server #2",

    "prefix" => "auto"

    )

    );



    $filesPerPage = 20;



    # Size in bytes

    function format_size($size, $round = 0)

    {

    $sizes = array('B', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB');



    for ($i=0; $size > 1024 && isset($sizes[$i+1]); $i++)

    $size /= 1024;



    return round($size, $round)." ".$sizes[$i];

    }



    function browse($path)

    {

    global $servers;

    global $filesPerPage;

    $data = array();

    $page = $_GET['page'];

    $page = !isset($page) || $page < 1 ? 0 : $page - 1;

    $prefix = $servers[$path]['prefix'];

    $prefix_sz = strlen($prefix) + 1;

    $offsets = array(

    year => $prefix_sz,

    month => $prefix_sz + 2,

    day => $prefix_sz + 4,

    hour => $prefix_sz + 9,

    minute => $prefix_sz + 11,

    map => $prefix_sz + 14

    );



    if(is_dir($path))

    {

    $files = glob($path."/*.dem.gz");

    $count = count($files);

    $pages = ceil( $count / $filesPerPage );

    $page = $page >= $pages ? $pages - 1 : $page;

    $begin = $count - ($page + 1) * $filesPerPage;

    $end = $count - $page * $filesPerPage;

    for($i = $begin < 0 ? 0 : $begin; $i < $end; ++$i)

    {

    $file = end( explode('/', $files[$i]) );

    $name_end = strrpos($file, ".dem");

    $name_end = $name_end === FALSE ? strrpos($file, ".gz") : $name_end;

    $tmpfilesize = @filesize($files[$i]);



    if($name_end === FALSE)

    continue;



    $tmp = array();

    $tmp[year] = substr($file, $offsets[year], 4);

    $tmp[month] = substr($file, $offsets[month], 2);

    $tmp[day] = substr($file, $offsets[day], 2);

    $tmp[hour] = substr($file, $offsets[hour], 2);

    $tmp[minute] = substr($file, $offsets[minute], 2);

    $tmp[map] = substr($file, $offsets[map], $name_end - $offsets[map]);

    $tmp[file] = $file;

    $tmp[size] = format_size($tmpfilesize);

    $tmp[path] = $files[$i];



    $data[] = $tmp;

    }

    $files = array();

    }



    echo '<table class="list" border="1" cellspacing="0" cellpadding="2">

    <tr>

    <th style="width: 25%; text-align: center;"> Карта</th>

    <th style="width: 15%; text-align: center;"> Дата</th>

    <th style="width: 9%; text-align: center;"> Время</th>

    <th style="width: 10%; text-align: center;"> Размер</th>

    <th style="text-align: center;"> Скачать</th>

    </tr>';



    if($count > 0)

    {

    $ll = 0;

    foreach($data as $field)

    {

    echo '<tr'.($ll?' class="ll"':'').'>

    <td style="text-align: center;">'.$field[map].'</td>

    <td style="text-align: center;">'.$field[day].'.'.$field[month].'.'.$field[year].'</td>

    <td style="text-align: center;">'.$field[hour].':'.$field[minute].'</td>

    <td style="text-align: center;">'.$field[size].'</td>

    <td style="text-align: center;"><a href="'.$field[path].'">'.$field[file].'</a></td>

    </tr>';

    $ll = !$ll;

    }

    }

    else

    {

    echo '<tr><td class="ll" colspan="5" align="center">- Нет демо -</td></tr>';

    }

    echo '</table>';

    if($pages > 1)

    {

    echo '<div class="pagination">';

    for($i = 0; $i < $pages; ++$i)

    {



    if($pages > 10)

    {

    if($i > 2 && $i < $page - 1)

    {

    echo '...';

    $i = $page - 1;

    }

    else

    if($i > $page + 1 && $i > 2 && $i < $pages - 3)

    {

    echo '...';

    $i = $pages - 3;

    }

    }

    if($i != $page)

    echo '<a href="?page='.($i + 1).'&amp;server='.$path.'">'.($i + 1).'</a>';

    else

    echo '<span>'.($page + 1).'</span>';

    }

    echo '</div>';

    }

    }

    ?>

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

    <html>

    <head>

    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

    <title>Cybervolga Demos</title>

    <style type="text/css">

    body

    {

    padding: 0px;

    margin: 0px;

    text-align: center;

    background-color: #1F1F1F;

    color: #6BA9BF;

    font-size: 9pt;

    font-family: sans-serif;

    }

    #wrapper

    {

    margin: 0 auto;

    padding: 0em 0.5em;

    max-width: 960px;

    min-width: 760px;

    width: auto !important;

    }

    #header

    {

    padding-bottom: 1em;

    }

    ul.menu

    {

    list-style-type: none;

    margin: 0em;

    margin-left: 1em;

    border-left: solid 3px #3f6fEF;

    padding: 0em;

    font-size: 11pt;

    float: left;

    }

    ul.menu li

    {

    padding-bottom: 1px;

    border-right: solid 1px #313A3F;

    border-bottom: solid 1px #313A3F;

    float: left;

    }

    ul.menu li:hover

    {

    border-bottom: solid 1px #6BA9BF;

    padding-bottom: 0px;

    }

    ul.menu li a

    {

    display: block;

    padding: 3px 1em;

    }

    ul.menu a:hover

    {

    padding: 3px 1em 4px 1em;

    background-color: #313A3F;

    }

    a

    {

    color: #6BA9BF !important;

    text-decoration:none;

    }

    h1.title

    {

    clear: left;

    text-shadow: 1px 1px 1px #666, -1px -1px 1px #000;

    }

    #content

    {

    min-height: 450px;

    }

    .list

    {

    width: 99%;

    text-align: left;

    border: #313A3F solid 1px;

    }

    .list th

    {

    border-bottom: solid 1px #313A3F;

    color: #4F6F7F;

    background: url('bgth.gif') repeat-x scroll center bottom #000;

    color: #EFEFEF;

    text-shadow: 1px 1px 1px #555, -1px -1px 1px #000;

    }

    .list tr:hover

    {

    background-color: #272F2F;

    }

    .list .ll

    {

    background-color: #313A3F;

    }

    .pagination

    {

    padding: 0.5em;

    font-size: 1.5em;

    }

    .pagination a

    {

    text-decoration: underline;

    margin: 0 0.2em;

    }

    .pagination span

    {

    margin: 0 0.1em;

    padding: 0 0.1em;

    background-color: #272F2F;

    }

    #footer

    {

    background-color: #272F2F;

    border: 1px solid #3f3f3f;

    padding: 1em;

    margin: 1em 0em 0.25em 0em;

    }

    </style>

    </head>

    <body>

    <div id="wrapper" align="center">

    <div id="header">

    <ul class="menu">

    <li><a href="http://cybervolga.com/">Сайт</a></li>

    <li><a href="http://cybervolga.com/forum/">Форум</a></li>

    <li><a href="http://88.147.148.229/sb/">Банлист</a></li>

    <li><a href="http://google.com./">В гугл?</a></li>

    </ul>

    <h1 class="title">SRCDS Demos</h1>

    </div>

    <div id="content">

    <?php

    if(is_array($servers))

    {

    $count = count($servers);

    if($count > 1)

    {

    ?>

    <form action="" method="get">

    <span style="font-weight: bold; font-size: 1.1em;">Server: </span>

    <select name="server">

    <?php

    foreach ($servers as $key => $value)

    {

    echo '<option'.( $key == $_GET['server'] ? ' selected' : '').' value="'.$key.'">'.$value['title'].'</option>';

    }

    ?>

    </select>

    <button type="submit">Go</button>

    </form>

    <?php

    }



    if($count == 1)

    {

    end($servers);

    browse( key($servers) );

    }

    else if($count == 0)

    {

    echo "- Список серверов пуст -";

    }

    elseif( isset( $servers[$_GET['server']] ) )

    browse($_GET['server']);

    }

    else

    {

    echo "- Скрипт не сконфигурирован -";

    }

    ?>

    </div>

    <div id="footer">SRCDS demos archive. CYBERVOLGA.COM</div>

    </div>

    </body>

    </html>
    [​IMG]
     
  4. rokas

    rokas

    Сообщения:
    11
    Симпатии:
    1
    Здравствуйте!
    Подскажите, а возможно ли автоматически перекидывать демки с сервера арендованного на хостинге на фтп сайта
     
  5. LEII4A

    LEII4A

    Сообщения:
    631
    Симпатии:
    116
    Besenok_Kid,
    срок хранения это пункт OLDER_THAN в скрипте так? 21 день 3 недели?то есть скрипт будит удалять файлы на веб сервере старше 3-х недель?
     
  6. rokas

    rokas

    Сообщения:
    11
    Симпатии:
    1
    Указанные скрипты как нибуть распознают записанные демки и демки в которые еще идет запись?
    Подскажите что не так делаю
    #!/bin/bash
    ##
    ## Скрипт архивирует демки, складывает в отдельный
    ## каталог и удаляет старые [c] CL0NE
    ##
    PATH_TO_DEMOS[0]="ftp://login:[email protected]/css/cstrike/dem/";
    OUT_PATH[0]="/home/p33335/www/xn----7sbhhxemlnnm5jqa6b.xn--p1ai/dem/";
    OLDER_THAN=21;
    IFS=$'\n'
    echo
    echo "[ Removing old and archiving new demos ]"
    echo
    for (( i = 0; i < "${#PATH_TO_DEMOS[@]}"; ++i));
    do
    DIR=${PATH_TO_DEMOS[$i]};
    OUT=${OUT_PATH[$i]};
    echo "Dir: $DIR";
    echo "Out: $OUT";
    find "$DIR" -name '*.dem' -mtime +$OLDER_THAN -exec rm {} \;
    find "$OUT" -name '*.gz' -mtime +$OLDER_THAN -exec rm {} \;
    echo "Cleaned";
    mkdir -p $OUT
    for file in `find "$DIR" -mmin +1 -name '*.dem' -print`
    do
    gzip -9 $file
    echo " `basename $file`"
    mv -ft "$OUT" "$file".gz
    done
    echo "Archived";
    echo
    done
    ##
    ##
    при выполнении данного скрипта вот такая ошибка
    /home/p33335/www/xn----7sbhhxemlnnm5jqa6b.xn--p1ai/sh/dem: line 7: : command not found
    /home/p33335/www/xn----7sbhhxemlnnm5jqa6b.xn--p1ai/sh/dem: line 8: : command not found
    /home/p33335/www/xn----7sbhhxemlnnm5jqa6b.xn--p1ai/sh/dem: line 10: echo: command not found
    [ Removing old and archiving new demos ]
    /home/p33335/www/xn----7sbhhxemlnnm5jqa6b.xn--p1ai/sh/dem: line 12: echo: command not found
    /home/p33335/www/xn----7sbhhxemlnnm5jqa6b.xn--p1ai/sh/dem: line 13: syntax error near unexpected token `'
    /home/p33335/www/xn----7sbhhxemlnnm5jqa6b.xn--p1ai/sh/dem: line 13: `for (( i = 0; i < "${#PATH_TO_DEMOS[@]}"; ++i));'
     
    Последнее редактирование: 6 янв 2012
  7. LEII4A

    LEII4A

    Сообщения:
    631
    Симпатии:
    116
    rokas,
    распознают, те которые пишутся скрипт не трогает. папка с демками у тебя фтп? не известно работает ли скрипт с фтп. попробуй в OUT_PATH[0]="/home/p33335/www/xn----7sbhhxemlnnm5jqa6b.xn--p1ai/dem/"; убрать слэш последний
     
  8. rokas

    rokas

    Сообщения:
    11
    Симпатии:
    1
    с ошибкамиэтими вроде разобрался при копировании и вставке почемуто добавилось куча символов которые я потер с помощью mc но теперь скрипт не хочет конектится к фтп

    [ Removing old and archiving new demos ]
    Dir: ftp://login:[email protected]/css/cstrike/dem
    Out: /home/p33335/www/xn----7sbhhxemlnnm5jqa6b.xn--p1ai/dem/
    find: ftp://ogin:[email protected]/css/cstrike: No such file or directory
    Cleaned
    find: ftp://ogin:[email protected]/css/cstrike: No such file or directory
    Archived
    login:pass естественно меняю на нужное) беда ...
    Добавлено через 13 часов 6 минут
    Подскажите что нужно подправить в php скрипте чтоб демки нормально скачивать можно было, а то когда кликаешь на демку то она не качается и путь к ней странный получается __http://красный-дьявол.рф/home/p33335/www/xn----7sbhhxemlnnm5jqa6b.xn--p1ai/dem/auto-20120107-002333-de_dust2.dem.gz__

    <td style="text-align: center;"><a href="'.$field[path].'">'.$field[file].'</a></td> похоже сдесь надо копать но в php я 0
     
    Последнее редактирование: 7 янв 2012
  9. CL0NE

    CL0NE

    Сообщения:
    3
    Симпатии:
    3
    Скрипт не рассчитан на использование ftp при архивировании. Однако прикрутить к нему отправку уже заархивированных демо не должно составить труда.
    На форуме-источнике уже дали ответ, должно работать.

    Неплохо было бы давать ссылку на источник, как минимум на gist (https://gist.github.com/1117172). Т.к. в случае обновления скриптов (исправления/дополнения) можно будет получить актуальную версию. Ну, и на форуме-источнике я бываю все же не слишком редко.
    З.Ы.: копирайты тереть нехорошо.
     
    Последнее редактирование: 20 фев 2012
  10. Besenok_Kid

    Besenok_Kid

    Сообщения:
    227
    Симпатии:
    63
    Оффтоп
     
  11. Vaio

    Vaio

    Сообщения:
    628
    Симпатии:
    218
    Подскажите как сделать скачку демок с ftp. Сервер на хостинге и данный скрипт не работает.
     
  12. Besenok_Kid

    Besenok_Kid

    Сообщения:
    227
    Симпатии:
    63
    Все скрипты рабочие и отлично работают. Есдинственное если прочтешь посты, а их не так много, то все разъясняется, что и куда. РНР на 100% рабочий, а вот серверный скрипт работает только на сервере. Чтобы скрипт автоматом кидал удаленно, то читай пост №9, там же ссылки на первоисточник.
     
  13. Vaio

    Vaio

    Сообщения:
    628
    Симпатии:
    218
    я о том что через фтп не работает. Дайте ссылку на форум источника, где есть решение.
     
  14. CL0NE

    CL0NE

    Сообщения:
    3
    Симпатии:
    3
    Изначально не стал указывать ссылку на форум-источник, чтобы не посчитали рекламой. Исправлено.
    проясню ситуацию: я ни в коем случае не против распространения, я только за :)

    И момент для тех, кто желает заливать/скачивать демо на/с фтп
    Есть два варианта:
    а) использовать curlftpfs
    плюсы:- практически без изменений будет работать скрипт (пути прописать + настроить монтирование ftp по curlftpfs)

    минусы:- ставить пакет из репозитария, возможно, кто-то сочтет нецелесообразным


    б) либо самому допилить нужный функционал, либо дождаться, когда у меня появится время сделать это.
    Примечание: Разница во времени на веб-сервере и фтп в любом случае может сломать одну вещь: не трогать демки, которые на данный момент пишутся.
    Для пользователей Windows также есть замена скрипту на jscript, в gist-е он лежит под именем arch_mv.js
    Требования - установленный 7zip, либо его версия для командной строки (в таком случае следует либо на 55й строке 7z заменить на 7za, либо переименовать исполняемый файл 7za в 7z). Путь к исполняемому файлу должен быть прописан в PATH. Скрипт следует запускать командой
    Код:
    cscript /nologo arch_mv.js
    (эту же команду с указанием пути добавляем в планировщик для автоматизации процесса)
     
    Vaio и Besenok_Kid нравится это.
  15. Vaio

    Vaio

    Сообщения:
    628
    Симпатии:
    218
    Как это организовать?
     
  16. ★Сириус★

    ★Сириус★

    Сообщения:
    748
    Симпатии:
    200
    пишет такую ошибку
    -bash: ./demo.sh: /bin/bash^M: bad interpreter: No such file or directory
     
  17. tiger_by

    tiger_by Гл. Админ SourceGames.RU

    Сообщения:
    629
    Симпатии:
    279
  18. KorDen

    KorDen Atra esterní ono thelduin!

    Сообщения:
    2.194
    Симпатии:
    1.398
    Короче открывай файл блокнотом++ или блокнотом2 и ставь Line Endings - Linux (LF)...
     
    ★Сириус★ нравится это.
  19. ★Сириус★

    ★Сириус★

    Сообщения:
    748
    Симпатии:
    200
    вобщем скачал скрипт с источник, поправил пути. теперь пишет следующее

    Dir: /var/www/gungame/data/server/css/cstrike/
    Out: /var/www/nextwin/data/www/nextwin.ru/severs/serverGunGame/demo/
    find: `/var/www/gungame/data/server/css/cstrike/': Permission denied
    Cleaned
    find: `/var/www/gungame/data/server/css/cstrike/': Permission denied
    Archived

    Это как можно поправить?
     
  20. tiger_by

    tiger_by Гл. Админ SourceGames.RU

    Сообщения:
    629
    Симпатии:
    279
    Permission denied - тут все ясно. Нет прав. Посмотри на владельца и права.
     
    ★Сириус★ нравится это.