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

mazil0

Участник
Сообщения
84
Реакции
4
Здравствуйте.

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

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

LEII4A

Участник
Сообщения
741
Реакции
135
Оффтоп
а если по теме, то написал бы что у тебя установлено и какая у тебя ОС. Например у меня Linux, установлен веб-сервер apache и если нужно хранилище демок, то делается это созданием симплинка с папки с демками на папку www
PHP:
ln -s /путь_к_папке/demos /var/www
 

Besenok_Kid

Участник
Сообщения
220
Реакции
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>
 

rokas

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

LEII4A

Участник
Сообщения
741
Реакции
135
Besenok_Kid,
срок хранения это пункт OLDER_THAN в скрипте так? 21 день 3 недели?то есть скрипт будит удалять файлы на веб сервере старше 3-х недель?
 

rokas

Участник
Сообщения
11
Реакции
1
Указанные скрипты как нибуть распознают записанные демки и демки в которые еще идет запись?
Подскажите что не так делаю
#!/bin/bash
##
## Скрипт архивирует демки, складывает в отдельный
## каталог и удаляет старые [c] CL0NE
##
PATH_TO_DEMOS[0]="ftp://login:pass@62.122.213.19/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));'
 
Последнее редактирование:

LEII4A

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

rokas

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

[ Removing old and archiving new demos ]
Dir: ftp://login:pass@62.122.213.19/css/cstrike/dem
Out: /home/p33335/www/xn----7sbhhxemlnnm5jqa6b.xn--p1ai/dem/
find: ftp://ogin:pass@62.122.213.19/css/cstrike: No such file or directory
Cleaned
find: ftp://ogin:pass@62.122.213.19/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
 
Последнее редактирование:

CL0NE

Участник
Сообщения
3
Реакции
3
[ Removing old and archiving new demos ]
Dir: ftp://login:pass@62.122.213.19/css/cstrike/dem
Out: /home/p33335/www/xn----7sbhhxemlnnm5jqa6b.xn--p1ai/dem/
find: ftp://ogin:pass@62.122.213.19/css/cstrike: No such file or directory
Cleaned
find: ftp://ogin:pass@62.122.213.19/css/cstrike: No such file or directory
Archived
login:pass естественно меняю на нужное) беда ...
Скрипт не рассчитан на использование ftp при архивировании. Однако прикрутить к нему отправку уже заархивированных демо не должно составить труда.
__http://красный-дьявол.рф/home/p33335/www/xn----7sbhhxemlnnm5jqa6b.xn--p1ai/dem/auto-20120107-002333-de_dust2.dem.gz__
На форуме-источнике уже дали ответ, должно работать.

Для Linux. Тестировалось на Ubuntu.
Скрипт для архивации файлов с расширением dem и переноса в указанную папку. Демки хранятся три недели. Все регулируется в скрипте.
Скрипт кладется в любое место, так как пути для архивации и переноса указываются в скрипте. Для того, чтобы скрипт постоянно запускался, добавьте в crontab.
Скрипт PHP.
Закиньте этот скрипт на веб сервер. Этот скрипт берет эти демки с папки куда складываются архивы. Целесообразно закинуть в sourcebans и добавить в меню sourceban кнопку демки, указав путь к скрипту. По сути не важно, где лежит этот скрипт на веб сервере.
Неплохо было бы давать ссылку на источник, как минимум на gist (https://gist.github.com/1117172). Т.к. в случае обновления скриптов (исправления/дополнения) можно будет получить актуальную версию. Ну, и на форуме-источнике я бываю все же не слишком редко.
З.Ы.: копирайты тереть нехорошо.
 
Последнее редактирование:

Besenok_Kid

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

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

Vaio

Участник
Сообщения
625
Реакции
215
Подскажите как сделать скачку демок с ftp. Сервер на хостинге и данный скрипт не работает.
 

Besenok_Kid

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

Vaio

Участник
Сообщения
625
Реакции
215
я о том что через фтп не работает. Дайте ссылку на форум источника, где есть решение.
 

CL0NE

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

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

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


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

Vaio

Участник
Сообщения
625
Реакции
215
Есть два варианта:
а) использовать curlftpfs
плюсы:- практически без изменений будет работать скрипт (пути прописать + настроить монтирование ftp по curlftpfs)
минусы:- ставить пакет из репозитария, возможно, кто-то сочтет нецелесообразным
Как это организовать?
 

★Сириус★

Участник
Сообщения
743
Реакции
197
пишет такую ошибку
-bash: ./demo.sh: /bin/bash^M: bad interpreter: No such file or directory
 

KorDen

Atra esterní ono thelduin!
Сообщения
2,142
Реакции
1,424
Короче открывай файл блокнотом++ или блокнотом2 и ставь Line Endings - Linux (LF)...
 

★Сириус★

Участник
Сообщения
743
Реакции
197
вобщем скачал скрипт с источник, поправил пути. теперь пишет следующее

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

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

tiger_by

Гл. Админ SourceGames.RU
Сообщения
631
Реакции
278
Permission denied - тут все ясно. Нет прав. Посмотри на владельца и права.
 
Сверху Снизу