Създаване на торент файлове през веб интерфейс. / Create torrent files via web interface.
от Илия Няголов на мар..31, 2009, категории Линукс, Мрежата, Програмиране
Първо искам да споделя, пробвах с какви ли не perl модули и всякакви други неща, и все не ставаше като хората. Също така не намерих нищо готово написано и завършено в „нета“ по тази тема. Затова реших да си напиша нещо набързо колкото да ми свърши работа и сега реших да го споделя с останалите.
Абсолютен фен съм на Gentoo, затова ще обясня какво съм инсталирал първоначално под него.
emerge -av net-p2p/ctorren
След това прочетох тук: http://en.gentoo-wiki.com/wiki/Wtorrent и инсталирах wtorrent. Но не ми хареса идеята за lighttpd и го направих с apache. За целта компилирах php със следните екстри 🙂
USE=“mysql sockets apache2 xmlreader xmlrpc xmlwriter simplexml xsl pdo sqlite xpm curl cgi ctype“ emerge -av dev-lang/php
,
редактирах „/etc/apache2/modules.d20_mod_scgi.conf“ по следния начин:
cat 20_mod_scgi.conf
LoadModule scgi_module modules/mod_scgi.so
SCGIMount /RPC2 localhost:5000
Alias /wtorrent /var/www/wtorrent
Deny from all
Allow from 22.14.122.13 22.14.122.14 22.14.121.251 #moite ip adresi za dostap do papkata
и добавих малко права за apache-то:
echo „apache ALL = NOPASSWD: /usr/bin/ctorrent“ >> /etc/sudoers
Ето го и съдържанието на моя скрипт – index.php
<?php
//start edit
$path = „/home/upload“; //izteglenite failove
$ctorrent = „/usr/bin/ctorrent“; // patia na torent klienta
$announce = „http://zinko.net/announce.php“; //announce na va6iat trakera
$torrents = „/var/www/wtorrent/make_torrent/torrents“; //papkata s nаpravenite torrenti i s permishan 666!
$wtorrent = „/wtorrent“; //patia na instalirania wtorrent
//stop edit$action = $_GET[‘action’];
if (!$action) {
echo „<body bgcolor=\“#D0E96E\“>“;
echo „Upravlenie na torrent files<br><table><tr><td>“;
acti(‘Make Torrent’,’pokaji’);
echo „</td><td>“;
acti(‘View Torrent’,’tview’);
echo „</td><td>“;
back_wtorrent();
echo „</td></tr></table>“;
echo „</body>“;
}if ($action == ‘pokaji’) {
echo „<body bgcolor=\“#D0E96E\“>“;
echo „<FORM method=\“get\“ action=?action >“;
echo „<INPUT type=\“hidden\“ name=\“action\“ value=\“dobaviane\“>“;
if ($handle = opendir($path)) {
while (false !== ($file = readdir($handle))) {
if ($file != „.“ && $file != „..“) {
echo „<input type=\“radio\“ name=\“izbran\“ value=\““.$file.“\“ default> „.$file.“<br>“;
}
}
closedir($handle);
}
echo „<INPUT type=\“submit\“ value=\“Next\“></FORM>“;
echo „<table><tr><td>“;
acti(‘View Torrent’,’tview’);
echo „</td><td>“;
back_wtorrent();
echo „</td></tr></table>“;
echo „</body>“;
}if (($action == ‘dobaviane’) && ($_GET[‘izbran’])) {
echo „<body bgcolor=\“#D0E96E\“>“;
$izbran = $path.“/“.$_GET[‘izbran’];
echo $_GET[‘izbran’] . „<br><br>“;if (!is_file($izbran)) {
echo $izbran.“<br><br>“;
echo ‘<pre>’; var_export(rscandir(„$izbran“.’/’)); echo ‘</pre>’;
} else {
echo $izbran.“<br><br>“;
}
echo „<table><tr><td><FORM method=\“get\“>“;echo „<FORM method=\“get\“>“;
echo „<INPUT type=\“hidden\“ name=\“action\“ value=\“napravi\“>“;
echo „<INPUT type=\“hidden\“ name=\“torrent1\“ value=\““.$_GET[‘izbran’].“\“>“;
echo „<INPUT type=\“submit\“ value=\“Make torrent\“></FORM>“;
echo „</td><td>“;
acti(‘Back’,’pokaji’);
echo „</td></tr><tr><td>“;
acti(‘View Torrent’,’tview’);
echo „</td><td>“;
back_wtorrent();
echo „</td></tr></table>“;
} else {
if ($action == ‘dobaviane’) {
echo „<body bgcolor=\“#D0E96E\“>“;
echo „Markirai neshto de :(.<br><br>“;
acti(‘Back’,’pokaji’);
echo „<table><tr><td><FORM method=\“get\“>“;
acti(‘View Torrent’,’tview’);
echo „</td><td>“;
back_wtorrent();
echo „</td></tr></table>“;
}
}if ($action == ‘napravi’) {
echo „<body bgcolor=\“#D0E96E\“>“;
$torrent_file = „$torrents/$torrent1.torrent“ ;
echo $torrent1.“<br><br>“;
if (file_exists($torrent_file)) {
echo „Faila sashtestvuva!<br><br>“;
echo „<table><tr><td><FORM method=\“get\“>“;
acti(‘Back’,’pokaji’);
echo „</td><td>“;
acti(‘View Torrent’,’tview’);
echo „</td></tr></table>“;
} else {
echo exec(„cd \“$path\“; $ctorrent -t -l 524288 -u $announce -s \“$torrent_file\“ \“$torrent1\““);
echo „<table><tr><td><FORM method=\“get\“>“;
acti(‘Make torrent’,’pokaji’);
echo „</td><td>“;
acti(‘View Torrent’,’tview’);
echo „</td><td>“;
back_wtorrent();
echo „</td></tr></table>“;
}
echo „</body>“;
}if ($action == ‘tview’) {
echo „<body bgcolor=\“#D0E96E\“>“;
echo „<FORM method=\“get\“ >“;
echo „<INPUT type=\“hidden\“ name=\“action\“ value=\“iztrivane\“>“;
if ($handle = opendir(„$torrents“)) {
while (false !== ($file = readdir($handle))) {
if ($file != „.“ && $file != „..“) {
$file1 = str_replace(“ „, „%20“, $file);
echo „<input type=\“radio\“ name=\“izbran\“ value=\““.$file.“\“ default><a href=torrents/“.$file1.“>“.$file.“</a><br>“;
}
}
closedir($handle);
}
echo „<INPUT type=\“submit\“ value=\“Del\“></FORM>“;
echo „<table><tr><td><FORM method=\“get\“>“;
acti(‘Make Torrent’,’pokaji’);
echo „</td><td>“;
back_wtorrent();
echo „</td></tr></table>“;
echo „</body>“;
}if ($action == ‘iztrivane’) {
if ($izbran) {
unlink(„$torrents/$izbran“);
header( ‘Location: ?action=tview’ ) ;
} else {
echo „<body bgcolor=\“#D0E96E\“>“;
echo „<table><tr><td><FORM method=\“get\“>“;
acti(‘Make Torrent’,’pokaji’);
echo „</td><td>“;
back_wtorrent();
echo „</td></tr></table>“;
echo „</body>“;
}
}function rscandir($base=“, &$data=array()) {
$array = array_diff(scandir($base), array(‘.’, ‘..’));
foreach($array as $value) :
if (is_dir($base.$value)) :
$data = rscandir($base.$value.’/’, $data);
elseif (is_file($base.$value)) :
$data[] = $base.$value;
endif;
endforeach;
return $data;
}function back_wtorrent() {
echo „<FORM method=\“get\“ action=\“/“.$wtorrent.“/\“ >“;
echo „<INPUT type=\“submit\“ value=\“Back to wtorrent\“></FORM>“;
echo „</body>“;
}function acti($kade,$actions) {
echo „<FORM method=\“get\“>“;
echo „<INPUT type=\“hidden\“ name=\“action\“ value=\“$actions\“>“;
echo „<INPUT type=\“submit\“ value=\“$kade\“></FORM>“;
}?>
За допълнителна информация и проблеми, пишете ми в коментари.
април 3rd, 2009 on 9:28 pm
Dosta mi dopadna 🙂