вопрос
Здравствуйте!
На Cms dle (9.8) была удалена функция [attachment] ,вместо неё был подключен модуль псевдоторрент
Суть работы модуля заключается в том что он после загрузки фаила в новость модуль берёт информация из торрент фаила и выводит её в таблице ,имитирую форму скачивания торрент файлов на торрент трекерах.Пример окошка привожу ниже
Переменные которые отвечают за вывод информации о размере файла (обведенно на скриншоте)
$rtnValue - размер файла
$torrent_size_str - Мб ил Гб в зависимости от веса файла
Вопрос в следующем: Как сделать эти 2 переменные тегами что бы выводить информацию о размере фаила в короткой новости ?
На Cms dle (9.8) была удалена функция [attachment] ,вместо неё был подключен модуль псевдоторрент
Установка:
1)В админ-панели разрешить к загрузке файлы типа torrent
2)Скопировать psevdotorrent.php в папку engine/modules/
3)Открыть functions.php в папке engine/modules/
4)После
вставить
5)Удалить функцию show_attach (не знаете что такое, читайте ниже)
стереть все от
до ближайшего
5)Закиньте файлы из папки images в папку images своего шаблона
.1)В админ-панели разрешить к загрузке файлы типа torrent
2)Скопировать psevdotorrent.php в папку engine/modules/
3)Открыть functions.php в папке engine/modules/
4)После
if(!defined('DATALIFEENGINE'))
{
die("Hacking attempt!");
}
вставить
include(ENGINE_DIR.'/modules/psevdotorrent.php');
5)Удалить функцию show_attach (не знаете что такое, читайте ниже)
стереть все от
function show_attach ($story, $id) {
до ближайшего
return $story;
5)Закиньте файлы из папки images в папку images своего шаблона
Суть работы модуля заключается в том что он после загрузки фаила в новость модуль берёт информация из торрент фаила и выводит её в таблице ,имитирую форму скачивания торрент файлов на торрент трекерах.Пример окошка привожу ниже
$db->query("SELECT id, name, onserver, dcount FROM " . PREFIX . "_files WHERE $where");
while($row = $db->get_row()){
$size = formatsize(@filesize ( ROOT_DIR . '/uploads/files/' . $row['onserver'] ));
$torrent= ( ROOT_DIR . '/uploads/files/' . $row['onserver'] );
$torrent1= ( $row['onserver'] );
$filename=$torrent;
class BDecode
{
function numberdecode($wholefile, $start)
{
$ret[0] = 0;
$offset = $start;
// Funky handling of negative numbers and zero
$negative = false;
if ($wholefile[$offset] == '-')
{
$negative = true;
$offset++;
}
if ($wholefile[$offset] == '0')
{
$offset++;
if ($negative)
{
return array(false);
}
if ($wholefile[$offset] == ':' || $wholefile[$offset] == 'e')
{
$offset++;
$ret[0] = 0;
$ret[1] = $offset;
return $ret;
}
return array(false);
}
while (true)
{
if ($wholefile[$offset] >= '0' && $wholefile[$offset] decodeDict($wholefile, $offset);
}
if ($wholefile[$offset] == 'l')
{
return $this->decodelist($wholefile, $offset);
}
if ($wholefile[$offset] == "i")
{
$offset++;
return $this->numberdecode($wholefile, $offset);
}
// String value: decode number, then grab substring
$info = $this->numberdecode($wholefile, $offset);
if ($info[0] === false)
{
return array(false);
}
$ret[0] = substr($wholefile, $info[1], $info[0]);
$ret[1] = $info[1]+strlen($ret[0]);
return $ret;
}
function decodeList($wholefile, $start)
{
$offset = $start+1;
$i = 0;
if ($wholefile[$start] != 'l')
{
return array(false);
}
$ret = array();
while (true)
{
if ($wholefile[$offset] == 'e')
{
break;
}
$value = $this->decodeEntry($wholefile, $offset);
if ($value[0] === false)
{
return array(false);
}
$ret[$i] = $value[0];
$offset = $value[1];
$i ++;
}
// The empy list is an empty array. Seems fine.
$final[0] = $ret;
$final[1] = $offset+1;
return $final;
}
// Tries to construct an array
function decodeDict($wholefile, $start=0)
{
$offset = $start;
if ($wholefile[$offset] == 'l')
{
return $this->decodeList($wholefile, $start);
}
if ($wholefile[$offset] != 'd')
{
return false;
}
$ret = array();
$offset++;
while (true)
{
if ($wholefile[$offset] == 'e')
{
$offset++;
break;
}
$left = $this->decodeEntry($wholefile, $offset);
if (!$left[0])
{
return false;
}
$offset = $left[1];
if ($wholefile[$offset] == 'd')
{
// Recurse
$value = $this->decodedict($wholefile, $offset);
if (!$value[0])
{
return false;
}
$ret[addslashes($left[0])] = $value[0];
$offset= $value[1];
continue;
}
else if ($wholefile[$offset] == 'l')
{
$value = $this->decodeList($wholefile, $offset);
if (!$value[0] && is_bool($value[0]))
{
return false;
}
$ret[addslashes($left[0])] = $value[0];
$offset = $value[1];
}
else
{
$value = $this->decodeEntry($wholefile, $offset);
if ($value[0] === false)
{
return false;
}
$ret[addslashes($left[0])] = $value[0];
$offset = $value[1];
}
}
if (empty($ret))
{
$final[0] = true;
}
else
{
$final[0] = $ret;
}
$final[1] = $offset;
return $final;
}
} // End of class declaration.
// Use this function. eg: BDecode("d8:announce44:http://www. ... e");
function BDecode($wholefile)
{
$decoder = new BDecode;
$return = $decoder->decodeEntry($wholefile);
return $return[0];
}
class BEncode
{
// Dictionary keys must be sorted. foreach tends to iterate over the order
// the array was made, so we make a new one in sorted order. :)
function makeSorted($array)
{
$i = 0;
// Shouldn't happen!
if (empty($array))
return $array;
foreach($array as $key => $value)
$keys[$i++] = stripslashes($key);
sort($keys);
for ($i=0; isset($keys[$i]); $i++)
$return[addslashes($keys[$i])] = $array[addslashes($keys[$i])];
return $return;
}
// Encodes strings, integers and empty dictionaries.
// $unstrip is set to true when decoding dictionary keys
function encodeEntry($entry, &$fd, $unstrip = false)
{
if (is_bool($entry))
{
$fd .= "de";
return;
}
if (is_int($entry) || is_float($entry))
{
$fd .= "i".$entry."e";
return;
}
if ($unstrip)
$myentry = stripslashes($entry);
else
$myentry = $entry;
$length = strlen($myentry);
$fd .= $length.":".$myentry;
return;
}
// Encodes lists
function encodeList($array, &$fd)
{
$fd .= "l";
// The empty list is defined as array();
if (empty($array))
{
$fd .= "e";
return;
}
for ($i = 0; isset($array[$i]); $i++)
$this->decideEncode($array[$i], $fd);
$fd .= "e";
}
// Passes lists and dictionaries accordingly, and has encodeEntry handle
// the strings and integers.
function decideEncode($unknown, &$fd)
{
if (is_array($unknown))
{
if (isset($unknown[0]) || empty($unknown))
return $this->encodeList($unknown, $fd);
else
return $this->encodeDict($unknown, $fd);
}
$this->encodeEntry($unknown, $fd);
}
// Encodes dictionaries
function encodeDict($array, &$fd)
{
$fd .= "d";
if (is_bool($array))
{
$fd .= "e";
return;
}
// NEED TO SORT!
$newarray = $this->makeSorted($array);
foreach($newarray as $left => $right)
{
$this->encodeEntry($left, $fd, true);
$this->decideEncode($right, $fd);
}
$fd .= "e";
return;
}
} // End of class declaration.
// Use this function in your own code.
function BEncode($array)
{
$string = "";
$encoder = new BEncode;
$encoder->decideEncode($array, $string);
return $string;
}
error_reporting (0);
$error="";
function pathurlencode($uri) {
$uri = str_replace(' ', '', $uri);
$uri = urlencode($uri);
$uri = str_replace('%3A', ':', $uri);
$uri = str_replace('%2F', '/', $uri);
$uri = str_replace('%26', '&', $uri);
$uri = str_replace('%40', '@', $uri);
$uri = str_replace('%3A', ':', $uri);
$uri = str_replace('%3F', '?', $uri);
$uri = str_replace('%3D', '=', $uri);
$uri = str_replace('%5B', '[', $uri);
$uri = str_replace('%5D', ']', $uri);
return $uri;
}
$uploaddir = "uploads"; // Where you want the files to upload to - Important: Make sure this folders permissions is 0777!
$allowed_ext = "torrent"; // These are the allowed extensions of the files that are uploaded
$max_size = "1000000"; // 50000 is the same as 50kb; 1000kb
// Check Extension
$extension = pathinfo($torrent);
$extension = $extension[extension];
$allowed_paths = explode(", ", $allowed_ext);
for($i = 0; $i $max_size)
{
print "Слишком большой файл!";
exit;
}
$filedata = @file_get_contents($torrent);
if ($filedata == FALSE) {
$error= "Не могу открыть .torrent Файл";
$error_code=1;
}
if(!isset($filedata)){
$error= "Ошибка при открытии Файла";
$error_code=2;
}else{
$array = BDecode($filedata);
if ($array === FALSE){
$error= "Торрент БИТЫЙ ";
$error_code=3;
if(array_key_exists("info", $array) === FALSE){
$error= "Ошибка 4. Сообщите об этом администратору.";
$error_code=4;
} }}
$data = BDecode($filedata);
// $data = BDecode($filedata);
$anounce=$data["announce"];
//if (isset($data["announce-list"]))
if ($data["announce"]=='http://10.6.126.6:2710/announce')
{
foreach ($data["announce-list"] as $alist)
{
$anounce=$alist[0];
}
}else{
$anounce=$data["announce"];
}
$scrape = str_replace('/announce', '/scrape', trim($anounce));
$httpget = "?info_hash=";
$infovariable =$data["info"];
$infohash = sha1(BEncode($infovariable));
$binsha1 = pack("H*", $infohash);
$fullurl = "$scrape$httpget".urlencode($binsha1);
// $scrape_url = pathurlencode($fullurl);
$scrape_url = $fullurl;
ini_set('default_socket_timeout', 10);
$scraped_data = file_get_contents($scrape_url);
// я канечна хз работает или нет... но ошипко убралось...
// проверить так и не осилел ))
if($scraped_data === FALSE){
$error = "<font color="red">[b]Не получен Ответ от Трекера. Попробуйте позже.[/b]</font> ";
$error_code=5;
}
else{
$decoded = BDecode($scraped_data);
if ($decoded["files"] === TRUE) {
$error = "Файл не зарегистрирован на трекере. Скорее Всего Торрент мёртв , или был создан совсем не давно.
$anounce";
$error_code=6;
}}
if (isset($infovariable["files"])) {
$filecount = "";
foreach ($infovariable["files"] as $file)
{
$filecount += "1";
// Loops through multifile torrent names
$multiname = $file['path'];
$multitorrentsize = $file['length'];
// $ea_size "." Mb
if ($multitorrentsize < 1024) {
$ea_size = " ".$multitorrentsize." Б (".$multitorrentsize.")";
} else
if ($multitorrentsize<(1024*1024)){
$ea_size = " ".round($multitorrentsize/1024,2)." Кб (".substr($multitorrentsize,0,strlen($multitorrentsize)-3).",".substr($multitorrentsize,strlen($multitorrentsize)-3,3).")";
} else if ($multitorrentsize<(1024*1024*1024)){
$ea_size = " ".round($multitorrentsize/1024/1024,2)." Мб (".substr($multitorrentsize,0,strlen($multitorrentsize)-6).",".substr($multitorrentsize,strlen($multitorrentsize)-6,3).",".substr($multitorrentsize,strlen($multitorrentsize)-3,3).")";
} else
$ea_size = " ".round($multitorrentsize/1073741824,2)." Гб (".substr($multitorrentsize,0,strlen($multitorrentsize)-9).",".substr($multitorrentsize,strlen($multitorrentsize)-9,3).",".substr($multitorrentsize,strlen($multitorrentsize)-6,3).",".substr($multitorrentsize,strlen($multitorrentsize)-3,3).")";
//$ea_size = " ".round($multitorrentsize/1024/1024/1024,2)." Гб (".round($multitorrentsize/1073741824).",".fmod(round($multitorrentsize/1000000),1000).",".round(fmod($rtnValue2,1000000)/1000).",".fmod($multitorrentsize,1000).")";
//echo "
".$multitorrentsize."
";
if (isset($multiname[1])){
//if ($filecount & 1 ){
// }else{
// $color="white";
//}
$mul_files= $mul_files . "<tr><td align="left" height="18" bgcolor="#f4f8fb"><font color="black">" . "<span style="'FONT-SIZE:"> [b]".mb_convert_encoding($multiname[0],"windows-1251","auto")."[/b] " . " / " . "<span style="'FONT-SIZE:"> ".mb_convert_encoding($multiname[1],"windows-1251","auto")." </span>"."</font></td>"."<td align="left" bgcolor="#f4f8fb"><font color="black"><span style="'FONT-SIZE:">$ea_size</span>"."</font></td>"."</tr>";
}else{
/*
if ($filecount & 1 ){
$color="#C0C0C0"; }else{
$color="white";
}
*/
$mul_files= $mul_files . "<tr><td align="left" height="18" bgcolor="#f4f8fb"><font color="black">" . "<span style="'FONT-SIZE:"> ".mb_convert_encoding($multiname[0],"windows-1251","auto")." </span>" . "</font></td>"."<td align="left" bgcolor="#f4f8fb"><font color="black"><span style="'FONT-SIZE:">$ea_size</span>"."</font></td>"."</tr>";
}
}}else{
$single_file_name=$infovariable["name"];
//$single_file_size = round($rtnValue,1);
if ($rtnValue2 < 1024) {
$single_file_size = " ".$rtnValue2." Б (".$rtnValue2.")";
} else
if ($rtnValue2<(1024*1024)){
$single_file_size = " ".round($rtnValue2/1024,2)." Кб (".substr($rtnValue2,0,strlen($rtnValue2)-3).",".substr($rtnValue2,strlen($rtnValue2)-3,3).")";
} else if ($rtnValue2<(1024*1024*1024)){
$single_file_size = " ".round($rtnValue2/1024/1024,2)." Мб (".substr($rtnValue2,0,strlen($rtnValue2)-6).",".substr($rtnValue2,strlen($rtnValue2)-6,3).",".substr($rtnValue2,strlen($rtnValue2)-3,3).")";
} else $single_file_size = " ".round($rtnValue2/1073741824,2)." Гб (".substr($rtnValue2,0,strlen($rtnValue2)-9).",".substr($rtnValue2,strlen($rtnValue2)-9,3).",".substr($rtnValue2,strlen($rtnValue2)-6,3).",".substr($rtnValue2,strlen($rtnValue2)-3,3).")";
//$single_file_size = " ".round($rtnValue2/1073741824,2)." Гб (".strcopy($rtnValue2,1,srtlen($rtnValue2)-12).",".strcopy($rtnValue2,1,srtlen($rtnValue2)-9).",".strcopy($rtnValue2,1,srtlen($rtnValue2)-6).",".strcopy($rtnValue2,1,srtlen($rtnValue2)-3).")";
$mul_files= "<tr><td align="left" height="18" bgcolor="#f4f8fb"><span style="'FONT-SIZE:"> ".mb_convert_encoding($single_file_name,"windows-1251","auto")." </span></td><td align="left" bgcolor="#f4f8fb"><span style="'FONT-SIZE:">".$single_file_size."</span></td></tr>";
$filecount= "1";
}
$scraped_array = BDecode($scraped_data);
foreach($scraped_array["files"] as $file_array)
$torrent_size = $rtnValue;
$seeds =$file_array["complete"];
$leechers= $file_array["incomplete"];
$comlete = $file_array["downloaded"];
// $speed =( ($seeds * 100)+($leechers*100) ) ;
if ($error_code>0) {
$seeds= 0;
$leechers=0;
$comlete=0;
}
if ($rtnValue>1024 ){
$rtnValue=round($rtnValue / 1024 , 1);
$torrent_size_str="Гб";
}else{
$torrent_size_str="Мб";
}
/*
if($speed >1024){
$speed_str="Mb/s";
$speed=round( $speed / 1024 , 1);
}
else{
$speed_str="Kb/s";
}
*/
}
else{
global $db, $config, $lang, $user_group, $member_id;
if (is_array($id) AND count($id))
$where = "news_id IN (".implode(",", $id).")";
else
$where = "news_id = '$id'";
$db->query("SELECT id, name, onserver, dcount FROM " . PREFIX . "_files WHERE $where");
while($row = $db->get_row()){
$size = formatsize(@filesize ( ROOT_DIR . '/uploads/files/' . $row['onserver'] ));
if (!$user_group[$member_id['user_group']]['allow_files'])
$link = "<span id="attachment">{$lang['att_denied']}</span>";
elseif ($config['files_count'] == 'yes')
$link = "<span id="attachment">[url={$config[]{$row['name']}[/url] [{$size}] ({$lang['att_dcount']} {$row['dcount']})</span>";
else
$link = "<span id="attachment">[url={$config[]{$row['name']}[/url] [{$size}]</span>";
$story = str_replace( '[attachment='.$row['id'].']', $link, $story );
}
$db->free();
return $story;
}
if( $speed <0 ) $speed=100;
if (!$user_group[$member_id['user_group']]['allow_files'])
$link = "<span id="attachment">{$lang['att_denied']}</span>";
elseif ($config['files_count'] == 'yes')
$link = "
<div>
[img]/torrent/spacer.gif[/img]
</div>
<table width="95%" border="0" cellpadding="2" cellspacing="1" class="btTbl" align="center">
<tr class="row3">
<td colspan="3" class="gen" align="center" style="'padding:">$torrent1</td>
</tr>
<tr class="row1">
<td width="15%" class="genmed"> Скачан: </td>
<td width="70%" class="genmed"> {$row['dcount']} раз(а) </td>
<td width="15%" class="gensmall" rowspan="7" align="center" style="'padding:">[url={$config[][img=|'Скачать]{THEME}/images/torrent/apl.gif[/img]
[b]Скачать[/b][/url]
$size</td>
</tr>
</tr>
<tr class="row1">
<td class="genmed"> Раздают: </td>
<td class="genmed"> <font color="green"><strong>216</strong> </font><img border="0" src="{THEME}/images/torrent/up1.gif" alt="'Сколько" /> </td>
</tr>
</tr>
<tr class="row1">
<td class="genmed"> Качают: </td>
<td class="genmed"> <font color="red"><strong>7</strong> </font><img border="0" src="{THEME}/images/torrent/down1.gif" alt="'Сколько" /> </td>
</tr>
<tr class="row1">
<td class="genmed"> Файлов: </td>
<td class="genmed"> <font color="#123456"><strong>$filecount</strong></font> </td>
</tr>
<tr class="row1">
<td class="genmed"> Размер: </td>
<td class="genmed"> <font color="#123456"><strong>$rtnValue</strong> $torrent_size_str</font> </td>
</tr>
</tr>
<tr class="row1">
<td class="genmed"> SHA Hash:</td>
<td class="genmed"> $infohash </td>
</tr>
</tr>
<tr class="row1">
<tr class="row3">
<td class="genmed" valign="middle" align="center" colspan="3" style="'padding:"> [url=http://stereotraker.ru/main/8-kak-skachat-s-torrenta.html]Как скачать с торрента?[/url]
</td>
</tr>
</table>
[center]
<div class="spoiler-wrap" align="center" style="'width:" solid="">
<div>
[b]<a>Список Файлов</a>[/b]
[/center]
<div class="clear" id="div1" style="display:none">
<table width="100%" border="0" cellpadding="1" cellspacing="1" class="btTbl" align="center">
$mul_files
</table>
</div>
</div>
</div>
<div>
[img]/torrent/spacer.gif[/img]
</div>
function toggle(){
var div1 = document.getElementById('div1')
if (div1.style.display == 'none') {
div1.style.display = 'block'
} else {
div1.style.display = 'none'
}
}
";
else
$link = "<p>Вы не можете скачивать торренты!</p>";
$story = str_replace( '[attachment='.$row['id'].']', $link, $story );
}
$db->free();
return $story;
}
?>
Переменные которые отвечают за вывод информации о размере файла (обведенно на скриншоте)
$rtnValue - размер файла
$torrent_size_str - Мб ил Гб в зависимости от веса файла
Вопрос в следующем: Как сделать эти 2 переменные тегами что бы выводить информацию о размере фаила в короткой новости ?
Ответил: КЭП
Создание тега из информации переменной выведенной из тега [attachment] ?
— Тогда мы идём к вам!