Просмотр файла webcopier/index.php

Размер файла: 19.49Kb
<?php
/*****************************************************************************/
/*   Скрипт PHP WebCopier версия 1.0 (04.05.2003)                            */
/*   Требования:                                                             */
/*   Платформа Unix, PHP 4.2.1 (Возможны версии ниже, но не ниже 4.0.2),     */
/*   mySQL и установленная библиотека CURL желательно версии 7.9.4 и выше.   */
/*   Лицензионное соглашение:                                                */
/*   Набор php скриптов в архиве phpwebcopier.1.0.tar.gz далее "скрипт".     */
/*   Скрипт является бесплатным, вы можете использовать его где угодно,      */
/*   бесплатно распостранять на любых носителях информации.                  */
/*   Вы не можете продавать или отдавать скрипт за какую нибудь оплату.      */
/*   Вы не можете давать скачивать скрипт со своих сайтов в сети интернет    */
/*   без разрешения автора. Вы не можете менять содержимое данного архива.   */
/*   За вред приченненный скриптом автор ответственности не несет.           */
/*   Автор: jeka! email: [email protected] url: http://phpscript.ru                */
/*   Информация:                                                             */
/*   Пишу скрипты практически любой сложности на заказ, цены от 5$ USA.      */
/*****************************************************************************/

@error_reporting(2039);
require("conf.php");
mysql_connect($dbhost, $dbuser, $dbpassword) or die("Нет коннекта к базе данных\n");
mysql_select_db($dbname) or die("Нет такой \"".$dbname."\" таблицы в базе данных\n");

if ($_GET['get'] == 2) {
	switch($_GET['act']?$_GET['act']:$_POST['act']) :
	case("reset"):
	force_rmdirs($folder);
	create_table(false,false,false,false,$tablename);
	header("location: ./?get=2");
	break;
	case("options"):
	if (!empty($_POST['logvar']) && !empty($_POST['logval']) && !empty($_POST['passvar']) && !empty($_POST['passval'])) {
		$cookie = $_POST['logvar'].'='.$_POST['logval'].';'.$_POST['passvar'].'='.$_POST['passval'];
	} else {
		$cookie = false;
	}
	if (!empty($_POST['proxy'])) {
		$proxy = 'http://'.$_POST['proxy'];
	} else {
		$proxy = false;
	}
	create_table(false,2,$cookie,$proxy,$tablename);
	header("location: ./?get=2");
	break;
	case("mask"):
	if (is_string($_POST['url']) && is_numeric($_POST['start']) && is_numeric($_POST['stop'])) {
		$url = split('\{\*\}',$_POST['url']);
		for($i=$_POST['start'];$i<=$_POST['stop'];$i++) {
			$tmp = @parse_url($url[0].$i.$url[1]);
			$path = $tmp['path'].($tmp['query']?$tmp['query']:'');
			$path = str_replace("\\","_",$path);
			$path = str_replace("/","_",$path);
			@mysql_query("INSERT INTO ".$tablename." VALUES ('','".$url[0].$i.$url[1]."','".$path."','','N');");
		}
	}
	header("location: ./?get=2");
	break;
	case("new"):
	if (!empty($_POST['url'])) {
		$url = str_replace(" ","",$_POST['url']);
		$url = str_replace("\r","",$url);
		$array = explode("\n",$url);
		if (count($array)) {
			foreach ($array as $val) {
				if (substr($val,0,1) != "#" && $val != "" && $val != NULL && $val != "\n" && (substr($val,0,4) == "http" || substr($val,0,4) == "HTTP")) {
					$tmp = @parse_url($val);
					$path = $tmp['path'].($tmp['query']?$tmp['query']:'');
					$path = str_replace("\\","_",$path);
					$path = str_replace("/","_",$path);
					@mysql_query("INSERT INTO ".$tablename." VALUES ('','".$val."','".$path."','','N');");
				}
			}
		}
	}
	header("location: ./?get=2");
	break;
	default :
	index();
	endswitch;
} else {
	switch($_GET['act']?$_GET['act']:$_POST['act']) :
	case("del"):
	force_rmdirs($folder);
	header("location: ./");
	break;
	case("add"):
	force_rmdirs($folder);
	if (!eregi('http://',$_POST['url'])) { $_POST['url'] = 'http://'.$_POST['url']; }
	if (!empty($_POST['logvar']) && !empty($_POST['logval']) && !empty($_POST['passvar']) && !empty($_POST['passval'])) {
		$cookie = $_POST['logvar'].'='.$_POST['logval'].';'.$_POST['passvar'].'='.$_POST['passval'];
	} else {
		$cookie = false;
	}
	if (!empty($_POST['proxy'])) {
		$proxy = 'http://'.$_POST['proxy'];
	} else {
		$proxy = false;
	}
	create_table($_POST['url'],1,$cookie,$proxy,$tablename);
	header("location: ./");
	break;
	case("dump"):
	exec("tar -czvf ./".date('H_i').".tar.gz ".$folder);
	header("location: ./");
	break;
	case("delfile"):
	unlink($_GET['id']);
	header("location: ./");
	break;
	case("stop"):
	stop();
	header("location: ./");
	break;
	case("start"):
	start();
	header("location: ./");
	break;
	default :
	index();
	endswitch;
}

	function stop()
	{
		rename('./scan.php', './scan.stop.php');
		touch('./scan.php');
		@chmod('./scan.php', 0755);
		return true;
	}

	function start()
	{
		unlink('./scan.php');
		rename('./scan.stop.php', './scan.php');
		return true;
	}

	function create_table($start=false,$type=false,$cookie=false,$proxy=false,$name='url')
	{
		$sql[] = "DROP TABLE IF EXISTS ".$name.";";
		$sql[] = "CREATE TABLE ".$name." (id int(11) unsigned NOT NULL auto_increment, url char(255) NOT NULL default '', ren char(255) NOT NULL default '', size int(11) default NULL, status enum('Y','N') NOT NULL default 'N', PRIMARY KEY  (id), UNIQUE KEY url (url), UNIQUE KEY ren (ren), KEY status (status)) TYPE=MyISAM;";
		$sql[] = "DROP TABLE IF EXISTS ".$name."_info;";
		$sql[] = "CREATE TABLE ".$name."_info (starturl char(255) NOT NULL default '', cookie char(255) default NULL, proxy char(100) default NULL, type int(2) NOT NULL default '1', PRIMARY KEY (starturl)) TYPE=MyISAM;";
		if ($start != false) { $sql[] = "INSERT INTO ".$name." VALUES ('','".$start."','index.html','','N');"; }
		if ($type != false) { $sql[] = "INSERT INTO ".$name."_info VALUES ('".($start?$start:'http://')."','".($cookie?$cookie:NULL)."','".($proxy?$proxy:NULL)."','".$type."');"; }
		foreach ($sql as $value) @mysql_query($value);
		if (!mysql_error()) return true;
		return false;
	}

	function force_rmdirs($dir)
	{
		if (($dh = @opendir($dir)) === false) return false;
		while(false !== ($file = readdir($dh))) {
			if ($file != '.' && $file != '..') {
				$path = $dir.'/'.$file;
				if (is_dir($path)) force_rmdirs($path);
				else unlink($path);
			}
		}
		closedir($dh);
		return true;
	}

	function dirsize($directory)
  {
     if (!is_dir($directory)) return -1;
     $size = 0;
     if ($DIR = opendir($directory))
     {
        while (($dirfile = readdir($DIR)) !== false)
        {
           if (is_link($directory . '/' . $dirfile) || $dirfile == '.' || $dirfile == '..')
              continue;
           if (is_file($directory . '/' . $dirfile))
              $size += filesize($directory . '/' . $dirfile);
           else if (is_dir($directory . '/' . $dirfile) && $dirfile != "bin")
           {
              $dirSize = dirsize($directory . '/' . $dirfile);
              if ($dirSize >= 0) $size += $dirSize;
              else return -1;
           }
        }
        closedir($DIR);
     }
     return $size;
  }

	function format_size($size)
	{
		if ($size / 1048576 > 1) return round($size/1048576, 1).'Mb.';
		elseif ($size / 1024 > 1) return round($size/1024, 1).'Kb.';
		else return round($size, 1).'b.';
	}

	function index()
	{
		Global $tablename,$folder;
		echo "<html>\n<head>\n<title>PHP WebCopier</title>\n";
		echo "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=windows-1251\">\n";
		echo "<style type=\"text/css\">\n<!--\n";
		echo "body, tr { font-family: Arial,Helvetica,sans-serif; font-size: 12px; font-weight: bold; color: #000000; background-color: #F5F5F5 }\n";
		echo "a:link { color: #0000FF }\n";
		echo "a:visited { color: #0000FF }\n";
		echo "a:hover { text-decoration: none; color: #FF0000 }\n";
		echo ".form { font-family: Arial,Helvetica,sans-serif; font-size: 12px; color: #000000; border: 1px solid #000000; background-color: #FFFFFF; }\n";
		echo "//-->\n</style>\n";
		echo "</head>\n<body bgcolor=\"#FFFFFF\">\n";
		echo "<script language=JavaScript>defaultStatus = '';</script>\n";
		
		if (!function_exists('curl_init')) { print("<p align=\"center\"><font color=\"#FF0000\">Тут скрипт работать не сможет, не подключена библиотека Curl!</font></p>"); }
		
		$yes = @mysql_result(@mysql_query("SELECT count(id) FROM ".$tablename." WHERE status='Y';"),0);
		$no = @mysql_result(@mysql_query("SELECT count(id) FROM ".$tablename." WHERE status='N';"),0);
		
		if (filesize('./scan.php') > 100) { $_process = "<a href=\"./?act=stop\">Остановить поиск</a>"; }
		else { $_process = "<a href=\"./?act=start\">Запустить поиск</a>"; }
		
		if ($yes && $_GET['get'] != 2) { $_prew = "<a href=\"".$folder."index.html\" target=\"_blank\">Посмотреть страницы</a>"; }
		else { $_prew = "Посмотреть страницы"; }
		
		if ($_GET['get'] == 2) { $_type = "<a href=\"./\">Копирование сайтов</a>"; }
		else { $_type = "<a href=\"./?get=2\">Закачка файлов</a>"; }
		
		echo "<table align=\"center\" bgcolor=\"#000000\" width=\"500\" cellspacing=\"2\" cellpadding=\"2\" border=\"0\">\n";
		echo "<tr>\n    <td valign=\"top\" width=\"100%\">Всего обработанных ссылок</td><th valign=\"top\">&nbsp;".$yes."&nbsp;</th><th valign=\"top\"></th>\n</tr>\n";
		echo "<tr>\n    <td valign=\"top\" width=\"100%\">Всего необработанных ссылок</td><th valign=\"top\">&nbsp;".$no."&nbsp;</th><th valign=\"top\"></th>\n</tr>\n";
		echo "<tr>\n    <td valign=\"top\" width=\"100%\">Объём директории сайта</td><th valign=\"top\">&nbsp;".format_size(dirsize($folder))."&nbsp;</th><th valign=\"top\">&nbsp;<a href=\"./?act=del\">Очистить</a>&nbsp;</th>\n</tr>\n";
		echo "<tr>\n    <th valign=\"top\" width=\"100%\" colspan=\"2\">".$_process."&nbsp;&nbsp;|&nbsp;&nbsp;".$_prew."&nbsp;&nbsp;|&nbsp;&nbsp;".$_type."</th><th valign=\"top\">&nbsp;<a href=\"./?act=dump\">В архив!</a>&nbsp;</th>\n</tr>\n";
		echo "</table>\n<br>\n";
		if (!$yes && !$no && $_GET['get'] == 2) {
			echo "<table align=\"center\" bgcolor=\"#000000\" width=\"500\" cellspacing=\"2\" cellpadding=\"2\" border=\"0\">\n";
			echo "<form action=\"./?get=2&act=options\" method=\"post\">\n";
			echo "<tr>\n    <th valign=\"top\" bgcolor=\"#c8c8c8\" colspan=\"2\">Настройки</th>\n</tr>\n";
			echo "<tr>\n    <td valign=\"top\" colspan=\"2\">Сейчас вы можете указать необходимые настройки авторизации и proxy, после добавления ссылок это уже нельзя будет изменить.</td>\n</tr>\n";
			echo "<tr>\n    <td valign=\"top\" width=\"100%\">Proxy, Пример: <font color=#000080>192.168.0.1:3128</font></td><td valign=\"top\" align=\"center\"><input type=\"Text\" name=\"proxy\" class=\"form\" style=\"width: 300;\"></td>\n</tr>\n";
			echo "<tr>\n    <td valign=\"top\" width=\"100%\">Название переменной логина</td><td valign=\"top\" align=\"center\"><input type=\"Text\" name=\"logvar\" class=\"form\" style=\"width: 300;\"></td>\n</tr>\n";
			echo "<tr>\n    <td valign=\"top\" width=\"100%\">Значение переменной логина</td><td valign=\"top\" align=\"center\"><input type=\"Text\" name=\"logval\" class=\"form\" style=\"width: 300;\"></td>\n</tr>\n";
			echo "<tr>\n    <td valign=\"top\" width=\"100%\">Название переменной пароля</td><td valign=\"top\" align=\"center\"><input type=\"Text\" name=\"passvar\" class=\"form\" style=\"width: 300;\"></td>\n</tr>\n";
			echo "<tr>\n    <td valign=\"top\" width=\"100%\">Значение переменной пароля</td><td valign=\"top\" align=\"center\"><input type=\"Text\" name=\"passval\" class=\"form\" style=\"width: 300;\"></td>\n</tr>\n";
			echo "<tr>\n    <td valign=\"top\" width=\"100%\" align=\"center\"><a href=\"javascript:\" onmouseover=\"window.status='Cookie авторизация';return true\" onClick=\"window.status='Cookie авторизация';alert('Если не нужна авторизация, то не надо заполнять последних 4 поля!\\nЧтобы узнать значения этих полей, сделайте следующее:\\nЗайдите на сайт который вы хотите скачать, авторизуйтесь там,\\nто есть введите свой логин и пароль.\\nПосле успешной авторизации у вас должны сохраниться файлы cookie,\\nих найти очень просто, нажмите в браузере IE кнопку:\\nСервис/Свойства обозревателя\\nВыберите закладку Общее, в ней Параметры, и нажмите Просмотр файлов.\\nФайл должен называться Cookie, найдите файл адрес которого совпадает\\nс тем сайтом где вы авторизовались.\\nОткройте его и найдете в нем названия переменных и значения их полей.\\nНапример:\\n\\tuserid\\t\\t- это название переменной логина\\n\\tvasya\\t\\t- это значение переменной логина\\n\\t*\\n\\tpass\\t\\t- это название переменной пароля\\n\\t4df67hgff6hR\\t- это значение переменной пароля\\n\\t*\\nДругие данные нам не нужны.');return true;\">Узнать про куки</a></td><td valign=\"top\" align=\"center\"><input class=\"form\" style=\"font-weight: bold; width: 300;\" type=\"submit\" value=\" Сохранить \"></td>\n</tr>\n";
			echo "</form></table>\n<br>\n";
		}
		echo "<table align=\"center\" bgcolor=\"#000000\" width=\"500\" cellspacing=\"2\" cellpadding=\"2\" border=\"0\">\n";
		if ($_GET['get'] == 2) {
			echo "<form action=\"./?get=2&act=mask\" method=\"post\">\n";
			echo "<tr>\n    <th valign=\"top\" bgcolor=\"#c8c8c8\" colspan=\"5\">Закачка файлов</th>\n</tr>\n";
			echo "<tr>\n    <td valign=\"top\" colspan=\"5\">Файлы по маске: для подставления чисел используйте {*} в адресе. <a href=\"javascript:\" onmouseover=\"window.status='Как закачивать файлы по маске';return true\" onClick=\"window.status='Как закачивать файлы по маске';alert('Закачка файлов по маске, это если вам необходимо загрузить файлы\\nв адресе которых различаются только цифры.\\nHапример: необходимо скачать все файлы с 0 по 100\\nАдрес файла http://host.ru/?act=download&num=0&title=file\\nМеняется значение num, значит в поле ввода url адреса мы пишем\\nhttp://host.ru/?act=download&num={*}&title=file\\nНачало указываем - 0, конец - 100, таким образом в адрес вместо {*}\\nбудет подставляться числовое значение.');return true;\">Справка</a></td>\n</tr>\n";
			echo "<tr>\n    <td valign=\"top\" width=\"100%\">Адрес url</td><td valign=\"top\" align=\"center\" colspan=\"4\"><input type=\"Text\" name=\"url\" class=\"form\" style=\"width: 370;\"></td>\n</tr>\n";
			echo "<tr>\n    <td valign=\"top\" width=\"100%\">Начальный номер</td><td valign=\"top\" align=\"center\"><input type=\"Text\" name=\"start\" class=\"form\" style=\"width: 40;\"></td><td valign=\"top\">Конечный номер</td><td valign=\"top\" align=\"center\"><input type=\"Text\" name=\"stop\" class=\"form\" style=\"width: 40;\"></td><td valign=\"top\" align=\"center\"><input class=\"form\" style=\"font-weight: bold; width: 100;\" type=\"submit\" value=\" Download \"></td>\n</tr></form>\n";
			echo "<form action=\"./?get=2&act=new\" method=\"post\">\n";
			echo "<tr>\n    <td valign=\"top\" colspan=\"5\">Одиночные ссылки, по одной в каждой строке</td>\n</tr>\n";
			echo "<tr>\n    <td valign=\"top\" colspan=\"5\" align=\"center\"><textarea cols=\"50\" rows=\"5\" class=\"form\" style=\"width: 400;\" name=\"url\"></textarea></td>\n</tr>\n";
			echo "<tr>\n    <td valign=\"top\" align=\"center\" colspan=\"4\"><a href=\"./?get=2&act=reset\">Новая закачка</a></td><td valign=\"top\" align=\"center\"><input class=\"form\" style=\"font-weight: bold; width: 100;\" type=\"submit\" value=\" Добавить \"></td>\n</tr>\n";
			echo "<tr>\n    <td valign=\"top\" colspan=\"5\">Чтобы начать закачивать файлы нажмите на ссылку \"Новая закачка\", для очистки БД и директории для файлов. После этого можно добавлять ссылки.</td>\n</tr>\n";
		} else {
			echo "<form action=\"./?act=add\" method=\"post\">\n";
			echo "<tr>\n    <th valign=\"top\" bgcolor=\"#c8c8c8\" colspan=\"2\">Копирование сайтов</th>\n</tr>\n";
			echo "<tr>\n    <td valign=\"top\" width=\"100%\">Адрес начальной страницы</td><td valign=\"top\" align=\"center\"><input type=\"Text\" name=\"url\" class=\"form\" style=\"width: 300;\"></td>\n</tr>\n";
			echo "<tr>\n    <td valign=\"top\" width=\"100%\">Proxy, Пример: <font color=#000080>192.168.0.1:3128</font></td><td valign=\"top\" align=\"center\"><input type=\"Text\" name=\"proxy\" class=\"form\" style=\"width: 300;\"></td>\n</tr>\n";
			echo "<tr>\n    <td valign=\"top\" width=\"100%\">Название переменной логина</td><td valign=\"top\" align=\"center\"><input type=\"Text\" name=\"logvar\" class=\"form\" style=\"width: 300;\"></td>\n</tr>\n";
			echo "<tr>\n    <td valign=\"top\" width=\"100%\">Значение переменной логина</td><td valign=\"top\" align=\"center\"><input type=\"Text\" name=\"logval\" class=\"form\" style=\"width: 300;\"></td>\n</tr>\n";
			echo "<tr>\n    <td valign=\"top\" width=\"100%\">Название переменной пароля</td><td valign=\"top\" align=\"center\"><input type=\"Text\" name=\"passvar\" class=\"form\" style=\"width: 300;\"></td>\n</tr>\n";
			echo "<tr>\n    <td valign=\"top\" width=\"100%\">Значение переменной пароля</td><td valign=\"top\" align=\"center\"><input type=\"Text\" name=\"passval\" class=\"form\" style=\"width: 300;\"></td>\n</tr>\n";
			echo "<tr>\n    <td valign=\"top\" width=\"100%\" align=\"center\"><a href=\"javascript:\" onmouseover=\"window.status='Cookie авторизация';return true\" onClick=\"window.status='Cookie авторизация';alert('Если не нужна авторизация, то не надо заполнять последних 4 поля!\\nЧтобы узнать значения этих полей, сделайте следующее:\\nЗайдите на сайт который вы хотите скачать, авторизуйтесь там,\\nто есть введите свой логин и пароль.\\nПосле успешной авторизации у вас должны сохраниться файлы cookie,\\nих найти очень просто, нажмите в браузере IE кнопку:\\nСервис/Свойства обозревателя\\nВыберите закладку Общее, в ней Параметры, и нажмите Просмотр файлов.\\nФайл должен называться Cookie, найдите файл адрес которого совпадает\\nс тем сайтом где вы авторизовались.\\nОткройте его и найдете в нем названия переменных и значения их полей.\\nНапример:\\n\\tuserid\\t\\t- это название переменной логина\\n\\tvasya\\t\\t- это значение переменной логина\\n\\t*\\n\\tpass\\t\\t- это название переменной пароля\\n\\t4df67hgff6hR\\t- это значение переменной пароля\\n\\t*\\nДругие данные нам не нужны.');return true;\">Узнать про куки</a></td><td valign=\"top\" align=\"center\"><input class=\"form\" style=\"font-weight: bold; width: 300;\" type=\"submit\" value=\" Создать Новый Поиск \"></td>\n</tr>\n";
		}
		echo "</form></table>\n<br>\n";
		$sql = @mysql_query("SELECT url FROM ".$tablename." WHERE status='N' LIMIT 0, 10;");
		if (@mysql_num_rows($sql)) {
			echo "<table align=\"center\" bgcolor=\"#000000\" width=\"500\" cellspacing=\"2\" cellpadding=\"2\" border=\"0\">\n";
			echo "<tr>\n    <th valign=\"top\" bgcolor=\"#c8c8c8\">10 следующих ссылок в очереди</th>\n</tr>\n";
			while ($res = @mysql_fetch_assoc($sql)) {
				echo "<tr>\n    <td valign=\"top\" width=\"100%\"><a href=\"".$res['url']."\" target=\"_blank\">".substr($res['url'],0,70)."</a></td>\n</tr>\n";
			}
			echo "</table>\n<br>\n";
		}
		$dir = opendir("./");
		while ($file = readdir($dir)) {
			if (substr($file, -3) == ".gz") {
				$db_file[] = $file;
			}
		}
		closedir($dir);
		if (is_array($db_file)) {
			echo "<table align=\"center\" bgcolor=\"#000000\" width=\"500\" cellspacing=\"2\" cellpadding=\"2\" border=\"0\">\n";
			echo "<tr>\n    <th valign=\"top\" colspan=\"3\" bgcolor=\"#c8c8c8\">Найдены сжатые базы с адресами:</th>\n</tr>\n";
			foreach ($db_file as $val) {
				echo "<tr>\n    <td valign=\"top\" width=\"100%\"><a href=\"".$val."\" target=\"_blank\">".$val."</a></td><th valign=\"top\">".filesize("./".$val)."&nbsp;байт.</th><th valign=\"top\"><a href=\"./?act=delfile&id=".$val."\">Удалить</a></th>\n</tr>\n";
			}
			echo "</table>\n<br>\n";
		}
		if ($yes) {
			echo "<table align=\"center\" bgcolor=\"#000000\" width=\"500\" cellspacing=\"2\" cellpadding=\"2\" border=\"0\">\n";
			echo "<tr>\n    <td valign=\"top\"><font color=#FF0000>Внимание!</font> Если вы хотите создать новый поиск, сохраните предварительно имеющийся сайт, при создании все данные удаляются!</td>\n";
			echo "</table>\n<br>\n";
		}
		echo "<p align=\"center\">PHP WebCopier - версия 1.0 &copy; jeka! <a href=\"http://phpscript.ru\" target=\"_blank\">phpscript.ru</a></p></body>\n</html>\n";
	}
@mysql_close();
?>