From 75af3d9de2fd45cdc5ba1b6427bba725c56f4fd7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Anton=20Luka=20=C5=A0ijanec?= Date: Sun, 12 Feb 2023 00:04:50 +0100 Subject: =?UTF-8?q?program=20in=20za=C4=8Detek=20analize?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- www/index.php | 3 +- www/insert.php | 132 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ www/stanje.php | 6 +++ 3 files changed, 140 insertions(+), 1 deletion(-) create mode 100755 www/insert.php create mode 100644 www/stanje.php (limited to 'www') diff --git a/www/index.php b/www/index.php index e37fe7f..96f0f8f 100644 --- a/www/index.php +++ b/www/index.php @@ -5,8 +5,9 @@ ?> -

število datotek:

+

število datotek:

seznam

+

stanje

iskalnik

" /> diff --git a/www/insert.php b/www/insert.php new file mode 100755 index 0000000..4fa8e59 --- /dev/null +++ b/www/insert.php @@ -0,0 +1,132 @@ +#!/usr/bin/php +setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); +try { + $s = $c->prepare("SELECT COUNT(1) FROM torrenti WHERE zgoščena_vrednost=:z"); + $s->bindParam(":z", $zgoščena_vrednost); + $zgoščena_vrednost = $t->getInfoHashV1(true); + $s->execute(); +} catch (PDOException $e) {} +if ($s->fetchColumn()) { + echo "torrent je že shranjen v podatkovni zbirki" . PHP_EOL; + exit(0); +} +try { + $c->exec("CREATE TABLE IF NOT EXISTS torrenti ( + zgoščena_vrednost BINARY(20) NOT NULL PRIMARY KEY, + " /* . "id INT UNSIGNED AUTO_INCREMENT UNIQUE NOT NULL COMMENT 'samo za lažje ročno navigiranje po podatkovni zbirki, pravi ključ je zgoščena vrednost', " */ . " + pridobljeno TIMESTAMP NOT NULL, + velikost_metainfo INT UNSIGNED NOT NULL COMMENT 'sem se štejejo tudi informacije, ki jih doda travnik, recimo created by, datum izdelave, vir in odjemalec. to ni le velikost info slovarja, vendar je striktno večja, saj je velikost celotne torrent datoteke.', + velikost_koščka INT UNSIGNED NOT NULL, + izvor VARBINARY(4096), + ime VARBINARY(4096), + ip BINARY(16) NOT NULL, + vrata SMALLINT UNSIGNED NOT NULL, + odjemalec VARCHAR(4096) + )"); + $c->exec('CREATE TABLE IF NOT EXISTS datoteke ( + id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, + torrent BINARY(20) NOT NULL, + FOREIGN KEY (torrent) REFERENCES torrenti (zgoščena_vrednost), + pot VARBINARY(4096) NOT NULL, + velikost BIGINT NOT NULL + )'); + $c->beginTransaction(); // glej php.net/manual/en/pdo.begintransaction.php + $s = $c->prepare("INSERT INTO torrenti ( + zgoščena_vrednost, + pridobljeno, + velikost_metainfo, + velikost_koščka, + izvor, + ime, + ip, + vrata, + odjemalec + ) VALUES ( + :z, + :pridobljeno, + :velikost_metainfo, + :v, + :izvor, + :ime, + INET6_ATON(:ip), + :vrata, + :odjemalec + )"); + $s->bindParam(":z", $zgoščena_vrednost); + $s->bindParam(":pridobljeno", $pridobljeno); + $s->bindParam(":velikost_metainfo", $velikost_metainfo); + $s->bindParam(":v", $velikost_koščka); + $s->bindParam(":izvor", $izvor); + $s->bindParam(":ime", $ime); + $s->bindParam(":ip", $ip); + $s->bindParam(":vrata", $vrata); + $s->bindParam(":odjemalec", $odjemalec); + $pridobljeno = date("Y-m-d H:i:s", $t->getCreationDate()); + $velikost_metainfo = filesize($argv[4]); + $velikost_koščka = $t->getPieceLength(); + $izvor = $t->getSource(); + if (strlen($izvor) > 4096) + echo "$argv[4] izvor $izvor daljši od 4096"; + $ime = $t->getName(); + if (strlen($ime) > 4096) + echo "$argv[4] ime $ime daljše od 4096"; + if (!isset($t->getRootData()["source"])) { + echo "$argv[4] nima source ključa" . PHP_EOL; + exit(4); + } + $ip = explode("/", $t->getRootData()["source"]["ip"])[0]; + $vrata = intval(explode("/", $t->getRootData()["source"]["ip"])[1]); + if (isset($t->getRootData()["source"]["v"])) + $odjemalec = $t->getRootData()["source"]["v"]; + $s->execute(); + function p ($k, $v, $p) { + global $c, $zgoščena_vrednost; + // if (preg_match("/padding.file/i", $k)) + // return; + if (is_array($v)) { + foreach ($v as $ke => $va) + p($ke, $va, $p . $k . "/"); + } else { + $s = $c->prepare("INSERT INTO datoteke ( + torrent, + pot, + velikost + ) VALUES ( + :torrent, + :pot, + :velikost + )"); + $s->bindParam(":torrent", $zgoščena_vrednost); + $s->bindParam(":pot", $pot); + $s->bindParam(":velikost", $velikost); + $pot = $p . $k; + if (strlen($pot) > 4096) + echo "$argv[4] pot $pot daljša od 4096"; + $velikost = $v; + $s->execute(); + } + } + try { + foreach ($t->getFileTree() as $k => $v) + p($k, $v, ""); + } catch (ParseException $e) { + echo "neveljaven metainfo $argv[4]: " . $e->getMessage() . PHP_EOL; + exit(5); + } + $c->commit(); +} catch (PDOException $e) { + echo "sql napaka pri $argv[4]: " . $e->getMessage() . PHP_EOL; + $c->rollback(); + exit(2); +} +$c = null; diff --git a/www/stanje.php b/www/stanje.php new file mode 100644 index 0000000..da429e1 --- /dev/null +++ b/www/stanje.php @@ -0,0 +1,6 @@ +
+ ../tmp/stanje.txt && sleep 1 && pkill -sigusr1 travnik");
+	sleep(1);
+	echo file_get_contents("../tmp/stanje.txt");
+?>
-- 
cgit v1.2.3