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/insert.php | 132 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 132 insertions(+) create mode 100755 www/insert.php (limited to 'www/insert.php') 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; -- cgit v1.2.3