Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Podobieństwo ciągów a md5
Mackos
post
Post #1





Grupa: Zarejestrowani
Postów: 362
Pomógł: 44
Dołączył: 10.06.2009

Ostrzeżenie: (0%)
-----


Mam dość trywialne pytanie.
Sprawa wygląda tak, że z dwóch źródeł (bazy i url) zaciągam kod html tej samej strony.
I teraz chcę porównać za pomocą ciągu znaków czy na pewno wygląd strony się nie zmienił, jednak może być sytuacja że zaciągnięty kod może delikatnie się różnić od tego w bazie, bo np. jak zaciągnę stronę z (wyobraźmy sobie) zaciągniętą sesją gdzie pisze "Witaj Maciej" to przez algorytm powinno to być uznane za tą samą stronę co z tekstem "Zaloguj się", jednak jeśli zostanie dodany nowy artykuł na stronie to algorytm powinien wykryć "nową wersję" strony.
I chciałem tutaj użyć funkcję Levenshteina levenshtein jednak z tego co wyczytałem w manualu może być max 255 znaków.
W związku z czym zastanawiam się czy zakodowanie obu wersji do md5 a następnie porównanie ich zda egzamin? Czy md5 może wykazać różnice lub podobieństwo? Jakie może być prawdopodobieństwo kolizji?


Edit: pomyłka chodziło mi o md5 nie base64

Dobra widzę że md5 nie był najlepszym pomysłem.
Jak by nie było niesamowicie wszystko muli przy tak długich ciągach znaków. Ma ktoś rozwiązanie jak to porównać żeby nie wywalało mi memory exceed?

Ten post edytował Mackos 16.03.2014, 14:54:30


--------------------
WebLemon.pl - projektowanie stron www, reklama i PR w internecie - Adwords, Facebook.
Go to the top of the page
+Quote Post
timon27
post
Post #2





Grupa: Zarejestrowani
Postów: 578
Pomógł: 69
Dołączył: 15.04.2007
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


jeśli w ciągu zmieni się choćby jedna literka to dowolny hash zmienia się zupełnie (nie ma żadnego związku z poprzednim). Gdyby było inaczej świadczyłoby to o jego słabości.

Porównanie tak wielkich ciągów nie jest dobrym pomysłem.
Powiedz co chcesz zrboić:
a ) sprowdzić czy strona się w ogóle zmieniła - sprawdź równość hashy
b ) sprawdzić czy się zmieniło coś konkretnego - wyciągnij tylko konkretną rzecz do porównania (np. interesuje cie stan produktu to wyciągnij tylko tę informację)

Przede wszystkim ogranicz to co porównujesz. Na pewno nie chcesz porównywać całej strony (nie interesują cie inne reklamy, czy zmienne informacje w stopce) wyciągnij tylko interesującego cię diva.

Ten post edytował timon27 16.03.2014, 15:46:58
Go to the top of the page
+Quote Post
Mackos
post
Post #3





Grupa: Zarejestrowani
Postów: 362
Pomógł: 44
Dołączył: 10.06.2009

Ostrzeżenie: (0%)
-----


Przygotowuję całkiem rzeźnię dla serwera.
W skrócie strony będą dodawane przez użytkowników, raz na czas powiedzmy 4-8 godzin) muszę sprawdzać czy nic się nie zmieniło np. nie dodano żadnego artykułu. W związku z czym nie mam możliwości napisania ogólnego regexa dla strony.
Jednak to co w miarę poprawiło sprawę to usunięcie wszystkich białych znaków z kodu oraz parsowanie tylko przedziału znaczników <body> ...
Zastanawiam się czy można to jeszcze jakoś udoskonalić, bo nadal czas wykonania 28 - 60+ sekund...

W sumie możnaby usunąć jeszcze wszystkie tagi html i spacje questionmark.gif Zda egzamin?


--------------------
WebLemon.pl - projektowanie stron www, reklama i PR w internecie - Adwords, Facebook.
Go to the top of the page
+Quote Post
timon27
post
Post #4





Grupa: Zarejestrowani
Postów: 578
Pomógł: 69
Dołączył: 15.04.2007
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


"czy nie dodano nowego artykułu"
Nie przechowuj całęj treści strony tylko tytuł najnowszego artykułu.

Jak obserwujesz inne elementy to dodaj tylko te elementy. A nie całą stronę.

Ten post edytował timon27 16.03.2014, 16:37:13
Go to the top of the page
+Quote Post
Mackos
post
Post #5





Grupa: Zarejestrowani
Postów: 362
Pomógł: 44
Dołączył: 10.06.2009

Ostrzeżenie: (0%)
-----


Strony będą dodawane przez użytkowników = skąd mam niby wyciągnąć treść artykułu jak z góry kod html każdej strony będzie inny i w żaden sposób nie narzucony przeze mnie? wink.gif
Już ogarnąłem po prostu usuwając spacje, białe znaki i tagi html jestem w stanie wyciągnąć ciąg znaków który jest jednoznaczny dla każdej aktualizacji strony, a zmiana jest zauważalna przez system.
Tylko niestety przy jednych stronach to działa tak, że podobieństwo stron gdzie różnica to (+/-) jeden artykuł wynosi aż 91% :/

Ten post edytował Mackos 16.03.2014, 17:07:20


--------------------
WebLemon.pl - projektowanie stron www, reklama i PR w internecie - Adwords, Facebook.
Go to the top of the page
+Quote Post
gitbejbe
post
Post #6





Grupa: Zarejestrowani
Postów: 516
Pomógł: 63
Dołączył: 27.08.2012

Ostrzeżenie: (0%)
-----


ja pitole, czuje że kombinujesz jak koń pod górkę. Jednak ludzka wyobraźnia nie zna granic

Cytat
W skrócie strony będą dodawane przez użytkowników, raz na czas powiedzmy 4-8 godzin) muszę sprawdzać czy nic się nie zmieniło np. nie dodano żadnego artykułu.


Ja tutaj nie widzę innego rozwiązania jak tylko dla każdej akcji użytkownika zrobić jakiś raport/historie zmian np do bazy. Nie ważne kto co zmieni na stronie, jeśli zapisze dany układ to leci raport do bazy dla tego użytkownika i koniec - a później możesz sobie robić z tym co tylko chcesz. Skąd Ty wymyśliłeś jakieś porównywanie md5 źródła strony ?!
Go to the top of the page
+Quote Post
viking
post
Post #7





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Dodaj jakiś trigger IF NEW.cos <> OLD.cos to co tam sobie chcesz. Chyba że bardziej kombinujesz.


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 21:56