To jest tylko wersja do druku, aby zobaczyć pełną wersję tematu, kliknij TUTAJ
phpBB2 by Przemo
Support forów phpBB2 modified by Przemo

HTML/PHP/AJAX/JS - [ PHP ] Porównanie MD5 i wy?wietlenie wyników.

Crypt3r - 09-03-2015, 01:33
Temat postu: [ PHP ] Porównanie MD5 i wyświetlenie wyników.
Problem dotyczy poprzedniego wątku: http://przemo.org/phpBB2/...ic.php?t=153084
Tym razem chodzi o wyświetlenie wyników. Potrzebuję w szablonie wyświetlić status prawidłowej (OK) bądź nieprawidłowej sumy kontrolnej pliku (BŁĄD).

Kod szablonu gdzie {STATUS} wyświetla status.
Kod:
 $template->assign_vars(array(
       'LICZBA' => $i,
        'NAZWA' => $nazwa_pliku,
       'MD5' => $suma_md5,
        'STATUS' => $md5_tablica,
       ));


Dla pojedynczego pliku wystarczy.
Kod:
$md5file = file_get_contents("md5file.txt");
if (md5_file("test.txt") == $md5file)
  {
  echo "The file is ok.";
  }
else
  {
  echo "The file has been changed.";
  }
?>


Ktoś mi jeszcze podpowiedział, że mogę zrobić to w ten sposób.
Kod:
foreach ( $tablica as $klucz => $wart )
{
echo $klucz . ' - ' ( $wart == md5_file($klucz) ? 'OK' : 'NIE OK' ) . "\n";
}


Z tym, ze w tym kodzie coś mi nie bangla i generalnie nie mogę upakować w nim kodu szablonu {STATUS}.
Zakładam, że ciągle kwestia rozbija się o tę pętlę foreach, ale nie za bardzo wiem gdzie jest błąd?

Tommekk80 - 09-03-2015, 07:40

Zaglądałeś, jak to jest napisane np w check_files.php? Tam jest porównywanie sumy kontrolnej właśnie wg zawartości check_data.php. Może nawet niepotrzebnie piszesz to co piszesz?
Crypt3r - 09-03-2015, 15:25

Tommekk80, oczywiście że zaglądałem. Posiłkowałem się tym plikiem, jednak potrzebuję prostego rozwiązania. Rozwiązanie Przema jest w porządku, wiele w nim opcji i danych, a mi wystarczy jedynie to co stworzyłem w tabelce (z poprzedniego wątku).

Stworzyłem coś takiego, ale nie chce za bardzo wyświetlać. Mało tego dubluje ciągle ostatni zapis z pierwszego foreach.

Kod:
foreach ($md5_tablica as $nazwa_pliku => $suma_md5) { //zwraca z tablicy ($md5_tablica): nazwę pliku ($nazwa_pliku) i sumę md5 ($suma_md5)
    $i++; //standardowa inkrementacja  każdej linii :)
   
    //echo "$i.<br/>";
    //echo "$nazwa_pliku <br/>";
    //echo "$suma_md5 <br/><br/>";
   
    //definicja {FUNKCJA} funkcji w szablonie tpl   
   

   

    foreach ( $md5_tablica as $nazwa_pliku => $suma_md5 )
    {
        echo $nazwa_pliku . ' - ' . ( $suma_md5 == md5_file($nazwa_pliku) ? 'OK' : 'NIE OK' ) . "\n";
    }


W tym i tak jest błąd, to pewne. Kwestia rozbija się tylko o porównanie sum plików z serwera z sumami, które znajdują się w pliku checker_sumy.php

Tutaj, cały kod pliku checker.php

Kod:
<?php

define('IN_PHPBB', true);
$phpbb_root_path = './';
include($phpbb_root_path . 'extension.inc');
include($phpbb_root_path . 'common.'.$phpEx);
include($phpbb_root_path . 'checker_sumy.'.$phpEx);
include($phpbb_root_path . 'language/lang_' . $board_config['default_lang'] . '/lang_checker.' . $phpEx);

$page_title = $lang['beta'];
$userdata = session_pagestart($user_ip, PAGE_INDEX);
init_userprefs($userdata);

if ($board_config['disable_checker'])
{
    message_die(GENERAL_MESSAGE, $lang['disable']);
}

/* Nagłówek */
include($phpbb_root_path . 'includes/page_header.'.$phpEx);
{

echo 'Test echo!<br/><br/>'; //jakiś tam sobie echo show :)

if ($userdata['user_level'] == ADMIN)
    {
   

$handle = fopen('checker_sumy.'.$phpEx , 'r'); //otwiera plik checker_sumy.php

foreach ($md5_tablica as $nazwa_pliku => $suma_md5) { //zwraca z tablicy ($md5_tablica): nazwę pliku ($nazwa_pliku) i sumę md5 ($suma_md5)
    $i++; //standardowa inkrementacja  każdej linii :)
   
    //echo "$i.<br/>";
    //echo "$nazwa_pliku <br/>";
    //echo "$suma_md5 <br/><br/>";
   
    //definicja {FUNKCJA} funkcji w szablonie tpl   
   

   

    foreach ( $md5_tablica as $nazwa_pliku => $suma_md5 )
    {
        echo $nazwa_pliku . ' - ' . ( $suma_md5 == md5_file($nazwa_pliku) ? 'OK' : 'NIE OK' ) . "\n";
    }



$template->assign_block_vars('checker', array(
            'LICZBA' => $i,
            'NAZWA' => $nazwa_pliku,
            'MD5' => $suma_md5,
            'STATUS' => $md5_tablica
            ));
}

$template->set_filenames(array('body' => 'checker_body.tpl'));
$template->pparse('body');    
    }
    else
    {
        message_die(GENERAL_MESSAGE, $lang['error']);
    }

   
}
/* Stopka */
include($phpbb_root_path . 'includes/page_tail.'.$phpEx);

?>

Tommekk80 - 09-03-2015, 16:03

Czemu masz pętlę w pętli? Ta w środku wydaje się być bez sensu.
Kod:
    foreach ( $md5_tablica as $nazwa_pliku => $suma_md5 )
    {
        echo $nazwa_pliku . ' - ' . ( $suma_md5 == md5_file($nazwa_pliku) ? 'OK' : 'NIE OK' ) . "\n";
    }

Crypt3r - 09-03-2015, 16:16

Dobra, przeniosłem ją pod wczytywanie szablonu, jednak tak czy siak pliku nie porównuje i ciągle wyświetla NIE OK. To i tak nie zmienia faktu, że czego bym nie robił to nie upakuję tego w szablon.

Kod:
$template->assign_block_vars('checker', array(
            'STATUS' => $md5_tablica
            ));
}


Cały kod pliku wygląda teraz tak:

Kod:
<?php

define('IN_PHPBB', true);
$phpbb_root_path = './';
include($phpbb_root_path . 'extension.inc');
include($phpbb_root_path . 'common.'.$phpEx);
include($phpbb_root_path . 'checker_sumy.'.$phpEx);
include($phpbb_root_path . 'language/lang_' . $board_config['default_lang'] . '/lang_checker.' . $phpEx);

$page_title = $lang['beta'];
$userdata = session_pagestart($user_ip, PAGE_INDEX);
init_userprefs($userdata);

if ($board_config['disable_checker'])
{
    message_die(GENERAL_MESSAGE, $lang['disable']);
}

/* Nagłówek */
include($phpbb_root_path . 'includes/page_header.'.$phpEx);
{

echo 'Test echo!<br/><br/>'; //jakiś tam sobie echo show :)

if ($userdata['user_level'] == ADMIN)
    {
   

$handle = fopen('checker_sumy.'.$phpEx , 'r'); //otwiera plik checker_sumy.php

foreach ($md5_tablica as $nazwa_pliku => $suma_md5) { //zwraca z tablicy ($md5_tablica): nazwę pliku ($nazwa_pliku) i sumę md5 ($suma_md5)
    $i++; //standardowa inkrementacja  każdej linii :)
   
    //echo "$i.<br/>";
    //echo "$nazwa_pliku <br/>";
    //echo "$suma_md5 <br/><br/>";
   
    //definicja {FUNKCJA} funkcji w szablonie tpl   
   

   





$template->assign_block_vars('checker', array(
            'LICZBA' => $i,
            'NAZWA' => $nazwa_pliku,
            'MD5' => $suma_md5,
            'STATUS' => $md5_tablica
            ));
}

    foreach ($md5_tablica as $nazwa_pliku => $suma_md5 )
    {
        echo $nazwa_pliku . ' - ' . ($suma_md5 == md5_file($nazwa_pliku) ? 'OK' : 'NIE OK' ) . "\n";
    }

$template->set_filenames(array('body' => 'checker_body.tpl'));
$template->pparse('body');    
    }
    else
    {
        message_die(GENERAL_MESSAGE, $lang['error']);
    }

   
}
/* Stopka */
include($phpbb_root_path . 'includes/page_tail.'.$phpEx);

?>


Zrzut z wyświetlania.

Tommekk80 - 09-03-2015, 16:20

Załączyłbyś wszystkie pliki? Jak masz zapisane nazwy plików w checker_sumy.php ?

//edit -
Kod:
 'STATUS' => $md5_tablica


skoro status = cała tablica, nie dziw się, że ci zwraca 'Array'

Crypt3r - 09-03-2015, 17:12

Oczywiście, nie ma problemu. Jeśli uda sie skończyć tego moda, to jak najbardziej go tutaj udostępnię.

checker.php
Kod:
<?php

define('IN_PHPBB', true);
$phpbb_root_path = './';
include($phpbb_root_path . 'extension.inc');
include($phpbb_root_path . 'common.'.$phpEx);
include($phpbb_root_path . 'checker_sumy.'.$phpEx);
include($phpbb_root_path . 'language/lang_' . $board_config['default_lang'] . '/lang_checker.' . $phpEx);

$page_title = $lang['beta'];
$userdata = session_pagestart($user_ip, PAGE_INDEX);
init_userprefs($userdata);

if ($board_config['disable_checker'])
{
    message_die(GENERAL_MESSAGE, $lang['disable']);
}

/* Nagłówek */
include($phpbb_root_path . 'includes/page_header.'.$phpEx);
{

echo 'Test echo!<br/><br/>'; //jakiś tam sobie echo show :)

if ($userdata['user_level'] == ADMIN)
    {
   

$handle = fopen('checker_sumy.'.$phpEx , 'r'); //otwiera plik checker_sumy.php

foreach ($md5_tablica as $nazwa_pliku => $suma_md5) { //zwraca z tablicy ($md5_tablica): nazwę pliku ($nazwa_pliku) i sumę md5 ($suma_md5)
    $i++; //standardowa inkrementacja  każdej linii :)
   
    //echo "$i.<br/>";
    //echo "$nazwa_pliku <br/>";
    //echo "$suma_md5 <br/><br/>";
   
    //definicja {FUNKCJA} funkcji w szablonie tpl   

$template->assign_block_vars('checker', array(
            'LICZBA' => $i,
            'NAZWA' => $nazwa_pliku,
            'MD5' => $suma_md5,
            'STATUS' => $md5_tablica
            ));
}

    foreach ($md5_tablica as $nazwa_pliku => $suma_md5 )
    {
        echo $nazwa_pliku . ' - ' . ($suma_md5 == md5_file($nazwa_pliku) ? 'OK' : 'NIE OK' ) . "\n";
    }

$template->set_filenames(array('body' => 'checker_body.tpl'));
$template->pparse('body');    
    }
    else
    {
        message_die(GENERAL_MESSAGE, $lang['error']);
    }

   
}
/* Stopka */
include($phpbb_root_path . 'includes/page_tail.'.$phpEx);

?>


checker_sumy.php
Kod:
<?php

$md5_tablica['index.php'] = F6D676F15750BFC27430EFA65F9DE551;
$md5_tablica['config.php'] = DB8967C7127A331B8225E2602C6B77DE;
$md5_tablica['viewtopic.php'] = D621C41C12B8ED9540D0BE6D1B6CDE0F;

?>


lang_checker.php
Kod:
<?php

// Główne
$lang['beta'] = 'Checker (beta)!';
$lang['error'] = 'Checker dostępny jest tylko dla głównego admina!';
$lang['disable'] = 'Cheker jest wyłączony! Włącz go w panelu admina.';

?>


checker_body.tpl
Kod:
<table width="100%" cellspacing="1" cellpadding="2" border="0" align="center">
    <tr>
        <td align="left">
            <span class="sciezka">Ścieżka: <a href="{U_INDEX}">{L_INDEX}</a> &raquo; <a href="{U_CHECKER}">{L_CHECKER}</a></span>
        </td>
    </tr>
</table>
<table width="100%" cellpadding="3" cellspacing="1" border="0" class="linia_forum">
   <tr>
        <td class="belka_gora" colspan="4" align="center"><span class="index_tekst">Checker plików</span></td>
    </tr>
    <tr>
        <td class="tlo1" align="center" width="10%"><span class="naglowek_kolor_b">#</span></td>
        <td class="tlo1" align="center" width="30%"><span class="naglowek_kolor_b">Nazwa pliku</span></td>
        <td class="tlo1" align="center" width="40%"><span class="naglowek_kolor_b">Suma (md5)</span></td>
        <td class="tlo1" align="center" width="20%"><span class="naglowek_kolor_b">Status</span></td>       
    </tr>
        <!-- BEGIN checker -->
    <tr>
        <td class="tlo1" align="center" width="10%">{checker.LICZBA}</td>
        <td class="tlo1" align="center" width="30%">{checker.NAZWA}</td>
        <td class="tlo1" align="center" width="40%">{checker.MD5}</td>
        <td class="tlo1" align="center" width="20%">{checker.STATUS}</td>
    </tr>
        <!-- END checker -->
    <tr>
        <td class="belka_dol" colspan="4"></td>
    </tr>
</table>

Tommekk80 - 09-03-2015, 17:34

Kod:
<?php

define('IN_PHPBB', true);
$phpbb_root_path = './';
include($phpbb_root_path . 'extension.inc');
include($phpbb_root_path . 'common.'.$phpEx);
include($phpbb_root_path . 'checker_sumy.'.$phpEx);
include($phpbb_root_path . 'language/lang_' . $board_config['default_lang'] . '/lang_checker.' . $phpEx);

$page_title = $lang['beta'];
$userdata = session_pagestart($user_ip, PAGE_INDEX);
init_userprefs($userdata);

if ($board_config['disable_checker'])
{
    message_die(GENERAL_MESSAGE, $lang['disable']);
}

/* Nagłówek */
include($phpbb_root_path . 'includes/page_header.'.$phpEx);
{

echo 'Test echo!<br/><br/>'; //jakiś tam sobie echo show :)

if ($userdata['user_level'] == ADMIN)
    {
   

$handle = fopen('checker_sumy.'.$phpEx , 'r'); //otwiera plik checker_sumy.php

foreach ($md5_tablica as $nazwa_pliku => $suma_md5) { //zwraca z tablicy ($md5_tablica): nazwę pliku ($nazwa_pliku) i sumę md5 ($suma_md5)
    $i++; //standardowa inkrementacja  każdej linii :)
   
    //echo "$i.<br/>";
    //echo "$nazwa_pliku <br/>";
    //echo "$suma_md5 <br/><br/>";
   
    //definicja {FUNKCJA} funkcji w szablonie tpl   
       
    $status = ($suma_md5 == md5_file($nazwa_pliku) ? 'OK' : 'NIE OK' );

$template->assign_block_vars('checker', array(
            'LICZBA' => $i,
            'NAZWA' => $nazwa_pliku,
            'MD5' => $suma_md5,
            'STATUS' => $status
            ));
}

$template->set_filenames(array('body' => 'checker_body.tpl'));
$template->pparse('body');   
    }
    else
    {
        message_die(GENERAL_MESSAGE, $lang['error']);
    }

   
}
/* Stopka */
include($phpbb_root_path . 'includes/page_tail.'.$phpEx);

?>


W checker_sumy.php sumy md5 w cudzysłów jeszcze wziąłem - i działa niby...

Crypt3r - 09-03-2015, 20:41

Dobry z Ciebie człowiek Tomku. Zauważ, że przy sumie kontrolnej z małymi literami jest OK, a gdy wstawi się zupełnie tę samą wyświetla NIE OK. Taka mała ciekawostka. Mam program pod Windowsem, który pobiera sumy md5, sha itd. po czym zapisuej w pliku txt, jednak z wielkimi literkami. Ale na to, jest prosta rada.

Kod:
$status =  strtolower($suma_md5) == md5_file($nazwa_pliku) ? 'OK' : 'NIE OK';


I gotowe. Bez względu na ich format, po jakiejkolwiek zmianie w plikach na serwerze wyświetla się odpowiedni status. Pobawię się jeszcze z językami. Gdy już wszystko będzie gotowe i będzie pracowało na produkcji, udostępnię tutaj na forum.

P.S. "Ciapki" dla sumy kontrolnej w pliku z sumami tak naprawdę nie mają żadnego znaczenia. Działa tak i tak.

Tommekk80 - 09-03-2015, 21:46

Crypt3r napisał/a:
Działa tak i tak

Nie wiem, mi z tą trójką w pierwszym znaku wywalało błąd. Przy literze było git.

Crypt3r - 09-03-2015, 22:24

Tommekk80 napisał/a:
Crypt3r napisał/a:
Działa tak i tak

Nie wiem, mi z tą trójką w pierwszym znaku wywalało błąd. Przy literze było git.


Wszystko działa, po dodaniu zmiany wielkich literek na małe. Przy porównywaniu znaków ma to znaczenie. Pomimo tego i tak wyświetla te z pliku checker_sumy.php

Spróbuję jeszcze popracować nad wyświetleniem dwóch sum, ale to i tak nie ma znaczenia. Checker jest na tyle banalny w samym zamyśle, że przyda się większości do sprawdzania czy czasem: Nie znalazł się ktoś życzliwy pakując PHPshell'a na serwer.

Dzięki Tomku za pomoc. Będę pisał w przypadku poważniejszych problemów. Jak na razie sobie radzę.



Powered by phpBB modified by Przemo © 2003 phpBB Group