Quellcode in Datenbank speichern

07/28/2019 11:24 .Insane#1
Hallo zusammen,
ich habe ein kleines Problem und irgendwie stehe ich etwas auf dem Schlauch.
Ich habe eine Datei test-input.php. In dieser gebe ich einen URL an. Mit dem URL wird mit folgender Codezeile der Quellcode ausgelesen und in der Datenbank gespeichert.
Code:
$url = $_POST['url'];
$source = file_get_contents($url);
$source_code = htmlspecialchars($source);

$insert = $pdo->prepare("INSERT INTO check_websites (user_id, url, source_code) VALUES (:user_id, :url, :source_code)");
$insert->execute(array('user_id' => $_SESSION['userid'], 'url' => $url, 'source_code' => $source_code));
In der zweiten Datei test.php gebe ich wiederum einen URL an und um den Quellcode auszulesen. Nun soll das Script beide Quellcodes vergleichen und überprüfen, ob sie übereinstimmen.
Code:
$url = $_POST['url'];
$source = file_get_contents($url);
$source_code = htmlspecialchars($source);
			
$statement = $pdo->prepare("SELECT * FROM check_websites WHERE user_id = :id AND url = :url");
$statement->bindParam(':id', $_SESSION['userid']);
$statement->bindParam(':url', $url);
$statement->execute();
$checkWebsite = $statement->fetch();

if($checkWebsite['source_code'] == $source_code) {
	echo "Die Webseite stimmt überein!";
} else {
	echo "Die Webseite stimmt nicht überein!";
}
Nur leider stimmen sie nie überein, auch wenn die Seiten definitv gleich sind. Ich denke es liegt an der Speicherung in der Datenbank.
Meine Datenbank sieht so aus:
[Only registered and activated users can see links. Click Here To Register...]

Hoffe mir kann jemand dabei helfen.
Danke im Voraus.

MfG

Edit:
Erst einmal vielen Dank für eure Hilfe. Habe jetzt umgestellt auf Hash und klappt alles wunderbar. Nur habe ich leider immer noch ein kleines Problem. Immer um 6 Minuten nach der vollen Stunde stellt er eine Änderung an der Webseite fest, obwohl gar keine Änderung stattgefunden hat. Immer nach einer Stunde ändert sich scheinbar etwas auf der Webseite und das Script löst aus. Jetzt ist eben nur die Frage, was es sein könnte. Es ist keine Uhr oder ähnliches auf der Webseite. Vielleicht hat ja jemand einen Tipp.
07/28/2019 13:14 False#2
Könnte mehrere Ursachen haben, hast du dir die zwei Sachen mal ausgeben lassen und geschaut wo der unterschied liegt ?
Was genau ist den dein Ziel der Anwendung?
Wieso musst du den Quellcode in der Datenbank speichern, würde es dir nicht auch reichen ein Hash vom Quellcode zu speichern ?
07/28/2019 14:25 .Insane#3
Quote:
Originally Posted by False View Post
Könnte mehrere Ursachen haben, hast du dir die zwei Sachen mal ausgeben lassen und geschaut wo der unterschied liegt ?
Was genau ist den dein Ziel der Anwendung?
Wieso musst du den Quellcode in der Datenbank speichern, würde es dir nicht auch reichen ein Hash vom Quellcode zu speichern ?
Habe den ursprünglichen Fehler selber beheben können. Lag nur daran, dass die Zeichenlänge der Datenbank nicht ausgereicht hat.

Ich möchte überprüfen, ob irgendwo auf der Webseite eine Änderung zu verzeichnen ist.
Also sobald sich im Quellcode etwas verändert hat zwischen der Speicherung der Webseite in der Datenbank und dem jetztigen Zeitpunkt, möchte ich je nach Ergebnis weitere Scripts ausführen.
Hättest du für diesen Einsatz eine bessere Lösung?
07/28/2019 16:35 False#4
Quote:
Originally Posted by .Insane View Post
Habe den ursprünglichen Fehler selber beheben können. Lag nur daran, dass die Zeichenlänge der Datenbank nicht ausgereicht hat.

Ich möchte überprüfen, ob irgendwo auf der Webseite eine Änderung zu verzeichnen ist.
Also sobald sich im Quellcode etwas verändert hat zwischen der Speicherung der Webseite in der Datenbank und dem jetztigen Zeitpunkt, möchte ich je nach Ergebnis weitere Scripts ausführen.
Hättest du für diesen Einsatz eine bessere Lösung?
Wie schon geschrieben wäre in dem Fall das speichern eines Hashs besser, da DEUTLICH weniger Speicherplatz verbraucht wird.

Beispiel:
PHP Code:
$hash hash_file('md5''https://www.google.de'); 
Damit bekommst du immer ein Hash (in dem Fall mit md5), der z.B. mit md5 IMMER 32 Zeichen lang ist, anstatt bis zu unendlich viele Zeichen (bei Google.de z.B 110286 Zeichen).
07/30/2019 15:08 iMostLiked#5
Du solltest auf jeden Fall niemals so viele Zeichen in einer MySQL Datenbank speichern.. wenn es wirklich sein muss, nutz eine NoSQL Datenbank wie Redis oder MongoDB.
Gibt sogar eine coole [Only registered and activated users can see links. Click Here To Register...] für Redis.

Aber im Grunde würde ich es so machen, wie @False bereits beschrieben hat.
07/30/2019 19:18 sk8land​#6
Quote:
Originally Posted by iMostLiked View Post
Du solltest auf jeden Fall niemals so viele Zeichen in einer MySQL Datenbank speichern.. wenn es wirklich sein muss, nutz eine NoSQL Datenbank wie Redis oder MongoDB.
Warum?
08/07/2019 08:08 .Insane#7
Erst einmal vielen Dank für eure Hilfe. Habe jetzt umgestellt auf Hash und klappt alles wunderbar. Nur habe ich leider immer noch ein kleines Problem. Immer um 6 Minuten nach der vollen Stunde stellt er eine Änderung an der Webseite fest, obwohl gar keine Änderung stattgefunden hat. Immer nach einer Stunde ändert sich scheinbar etwas auf der Webseite und das Script löst aus. Jetzt ist eben nur die Frage, was es sein könnte. Es ist keine Uhr oder ähnliches auf der Webseite. Vielleicht hat ja jemand einen Tipp.
08/07/2019 10:20 False#8
Quote:
Originally Posted by .Insane View Post
Erst einmal vielen Dank für eure Hilfe. Habe jetzt umgestellt auf Hash und klappt alles wunderbar. Nur habe ich leider immer noch ein kleines Problem. Immer um 6 Minuten nach der vollen Stunde stellt er eine Änderung an der Webseite fest, obwohl gar keine Änderung stattgefunden hat. Immer nach einer Stunde ändert sich scheinbar etwas auf der Webseite und das Script löst aus. Jetzt ist eben nur die Frage, was es sein könnte. Es ist keine Uhr oder ähnliches auf der Webseite. Vielleicht hat ja jemand einen Tipp.
Kann alles mögliche sein, einfach beide Versionen herunterladen und ein Diff erzeugen.
08/07/2019 11:46 .Insane#9
Quote:
Originally Posted by False View Post
Kann alles mögliche sein, einfach beide Versionen herunterladen und ein Diff erzeugen.
Es war eine winzige Änderung im Quelltext. Habe jetzt das Script angepasst.
Ich hole mir mittels PHP Simple HTML DOM Parser den plaintext und überprüfe diesen auf Änderungen. Erfüllt für mich den Zweck und so läuft das Script jetzt auch präziser.
Danke für deine Hilfe im Thread!