Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] set_error_handler, ob_start() i podmiana zawartości bufora.
Forum PHP.pl > Forum > PHP
angel2953
Dokładniej chodzi mi o to, że w zmiennej $errcontext znajduje się zrzut tablicy GLOBALS i tam znajduje się zawartość tablicy $config i z niej chciałbym się pozbyć (zamienić na *) hasła do bazy. Cała funkcja wygląda tak:
Kod
//----------------------------
// Define our own error handler
//----------------------------
function solarbox_error($errno, $errstr, $errfile, $errline, $errcontext)
{
    ob_start();
    print_r($errcontext);
    $errcontext = ob_get_contents();
    //$errcontext = preg_replace('/\[sql_pass\] => ([a-zA-z0-9_-]{6,32})/si', "[sql_pass] => *******", $errcontext);
    $errcontext = preg_replace('/\[sql_pass\] \=\> (.*?)/si', '[sql_pass] => *******', $errcontext);
    ob_end_clean();
    
    echo "<h1>There was an error...</h1>\n";
    echo "<table cellspacing='1' cellpadding='1' border='0' width='800'>\n";
    echo "<tr><td style='width:200px; background-color:#CCC;'><b>Error number:</b></td><td style='background-color:#CCC;'>" . $errno . "</td></tr>\n";
    echo "<tr><td style='width:200px; background-color:#CCC;'><b>Error message:</b></td><td style='background-color:#CCC;'>" . $errstr . "</td>\n";
    echo "<tr><td style='width:200px; background-color:#CCC;'><b>File:</b></td><td style='background-color:#CCC;'>" . basename($errfile) . "</td></tr>\n";
    echo "<tr><td style='width:200px; background-color:#CCC;'><b>Line:</b></td><td style='background-color:#CCC;'>" . $errline . "</td></tr>\n";
    echo "<tr><td style='width:200px; background-color:#CCC;'><b>Error contexts:</b></td><td style='background-color:#CCC;'><pre>" . $errcontext . "</pre></td></tr>\n";
    echo "</table>\n";
    echo "<p>Admin was informed about this error...</p>\n";
    exit;
}

set_error_handler('solarbox_error', E_ALL);


wszystko jest ładne ale przy Error context: jest mały problem bo:
Kod
Array
(
    [GLOBALS] => Array
*RECURSION*
    [_POST] => Array
        (
        )

    [_GET] => Array
        (
        )

    [_COOKIE] => Array
        (
        )

    [_FILES] => Array
        (
        )

    [config] => Array
        (
            [sql_type] => mysql
            [sql_host] => localhost
            [sql_user] => db_user
            [sql_pass] => *******Pa$$w0rd
            [sql_name] => db_name
            [sql_table_prefix] => tbl_
        )

)


no i tutaj jest mój problem bo tego Pa$$w0rd nie powinno być, powinny być same gwiazdki (przynajmniej takie było założenie)... No chyba, że w regexpach sie gdzieś walnąłem...
nevt
  1. <?php
  2. // zamień swój wzorzec
  3.  
  4. preg_replace('/[sql_pass] => (.*?)/si', ...
  5.  
  6. // na
  7.  
  8. preg_replace('/[sql_pass] => (.*?)$/si', ...
  9. ?>
angel2953
tego też już próbowałem ale nie działa bo mi ucina wszystko co jest po tej linijce:
Kod
Array
(
    [GLOBALS] => Array
*RECURSION*
    [_POST] => Array
        (
        )

    [_GET] => Array
        (
        )

    [_COOKIE] => Array
        (
        )

    [_FILES] => Array
        (
        )

    [config] => Array
        (
            [sql_type] => mysql
            [sql_host] => localhost
            [sql_user] => db_user
            [sql_pass] => *******


czyli ucina to co najważniejsze. Od razu mówię, że ten errcontext jest wyświetlany tylko w trybie FULL_DEBUG a w normalnym trybie jest zapisywany w raportach błędów, które user może do mnie przesłać a zbytnio nie chciałbym by czuł się nie pewnie, że mam jego hasło do bazy...
erix
Wywal modyfikator s ze wzorca.

Cytat
w normalnym trybie jest zapisywany w raportach błędów, które user może do mnie przesłać

A nie lepiej byłoby wyrzucać to do pliku i userowi zwracać tylko identyfikator?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.