Ankündigung

Einklappen
Keine Ankündigung bisher.

PHP/Webseiten Problem seit PHP-Update auf 5.3.9

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • PHP/Webseiten Problem seit PHP-Update auf 5.3.9

    Unser Hoster hat ein PHP update auf 5.3.9 gemacht(die vorgänger version ist mir bisher nicht bekannt), seither haben wir folgende fehlermeldung :

    Notice: Undefined variable: installation in /pfad/etc/blah/inc/config.php on line 89

    Was bedeutet das die Webseite bis auf die fehlermeldung gänzlich nicht mehr funktioniert.

    Hier der zugehörige PHP-code :
    PHP-Code:
    <?php
    ## REQUIRES ##
    require_once(basePath."/inc/mysql.php");

    function 
    show($tpl$array)
    {
      global 
    $tmpdir;
        
    $template "../inc/_templates_/".$tmpdir."/".$tpl;
      
        if(
    $fp = @fopen($template.".".html"r"))
          
    $tpl = @fread($fpfilesize($template.".".html));
        
        
    $array['dir'] = '../inc/_templates_/'.$tmpdir;
        foreach(
    $array as $value => $code)
        {
          
    $tpl str_replace('['.$value.']'$code$tpl);
        }
      return 
    $tpl;
    }

    //-> MySQL-Datenbankangaben
    $prefix $sql_prefix;                      
    $db = array("host" =>           $sql_host,
                
    "user" =>           $sql_user,
                
    "pass" =>           $sql_pass,
                
    "db" =>             $sql_db,
                
    "artikel" =>        $prefix."artikel",
                
    "acomments" =>      $prefix."acomments",
                
    "awards" =>         $prefix."awards",
                      
    "away" =>           $prefix."away",
                
    "banned" =>         $prefix."banned",
                
    "buddys" =>         $prefix."userbuddys",
                
    "ipcheck" =>        $prefix."ipcheck",
                
    "clankasse" =>      $prefix."clankasse",
                
    "c_kats" =>         $prefix."clankasse_kats",
                
    "c_payed" =>        $prefix."clankasse_payed",
                
    "config" =>         $prefix."config",
                
    "counter" =>        $prefix."counter",
                
    "c_ips" =>          $prefix."counter_ips",
                
    "c_who" =>          $prefix."counter_whoison",
                
    "cw" =>             $prefix."clanwars",
                
    "cw_comments" =>    $prefix."cw_comments",
                
    "cw_player" =>      $prefix."clanwar_players",
                
    "downloads" =>      $prefix."downloads",
                
    "dl_kat" =>         $prefix."download_kat",
                
    "events" =>         $prefix."events",
                
    "f_access" =>       $prefix."f_access",
                      
    "f_abo" =>          $prefix."f_abo",
                
    "f_kats" =>         $prefix."forumkats",
                
    "f_posts" =>        $prefix."forumposts",
                
    "f_skats" =>        $prefix."forumsubkats",
                
    "f_threads" =>      $prefix."forumthreads",
                
    "gallery" =>        $prefix."gallery",
                
    "gb" =>             $prefix."gb",
                
    "glossar" =>        $prefix."glossar",
                
    "links" =>          $prefix."links",
                
    "linkus" =>         $prefix."linkus",
                
    "msg" =>            $prefix."messages",
                
    "news" =>           $prefix."news",
                
    "navi" =>           $prefix."navi",
                
    "navi_kats" =>      $prefix."navi_kats",
                
    "newscomments" =>   $prefix."newscomments",
                
    "newskat" =>        $prefix."newskat",
                
    "partners" =>       $prefix."partners",
                
    "permissions" =>    $prefix."permissions",
                
    "pos" =>            $prefix."positions",
                
    "profile" =>        $prefix."profile",
                
    "rankings" =>       $prefix."rankings",
                
    "reg" =>            $prefix."reg",
                
    "server" =>         $prefix."server",
                
    "serverliste" =>    $prefix."serverliste",
                
    "settings" =>       $prefix."settings",
                
    "shout" =>          $prefix."shoutbox",
                
    "sites" =>          $prefix."sites",
                
    "squads" =>         $prefix."squads",
                
    "squaduser" =>      $prefix."squaduser",
                
    "sponsoren" =>      $prefix."sponsoren",
                
    "taktik" =>         $prefix."taktiken",
                
    "users" =>          $prefix."users"
                
    "usergallery" =>    $prefix."usergallery",
                
    "usergb" =>         $prefix."usergb",
                
    "userpos" =>        $prefix."userposis",    
                
    "userstats" =>      $prefix."userstats",
                
    "votes" =>          $prefix."votes",
                
    "vote_results" =>   $prefix."vote_results"
                
    );

    if(
    $installation)
    {
      
    $msql = @mysql_connect($db['host'],$db['user'],$db['pass']);
              @
    mysql_select_db($db['db'],$msql);
    } else {    
      if(!
    $msql mysql_connect($db['host'],$db['user'],$db['pass'])) die("<b>Fehler beim Zugriff auf die Datenbank!");
      if(!
    mysql_select_db($db['db'],$msql)) die("<b>Die angegebene Datenbank <i>".$db['db']."</i> existiert nicht!");
    }

    function 
    db($db)
    {
      global 
    $prefix;
      if(!
    $qry mysql_query($db)) die('<b>MySQL-Query failed:</b><br /><br /><ul>'.
                                       
    '<li><b>ErrorNo</b> = '.str_replace($prefix,'',mysql_errno()).
                                       
    '<li><b>Error</b>   = '.str_replace($prefix,'',mysql_error()).
                                       
    '<li><b>Query</b>   = '.str_replace($prefix,'',$db).'</ul>');
      return 
    $qry;
    }
    ?>
    Ab Zeile 89 :
    PHP-Code:
    {
      
    $msql = @mysql_connect($db['host'],$db['user'],$db['pass']);
              @
    mysql_select_db($db['db'],$msql);
    } else {    
      if(!
    $msql mysql_connect($db['host'],$db['user'],$db['pass'])) die("<b>Fehler beim Zugriff auf die Datenbank!");
      if(!
    mysql_select_db($db['db'],$msql)) die("<b>Die angegebene Datenbank <i>".$db['db']."</i> existiert nicht!");
    }

    function 
    db($db)
    {
      global 
    $prefix;
      if(!
    $qry mysql_query($db)) die('<b>MySQL-Query failed:</b><br /><br /><ul>'.
                                       
    '<li><b>ErrorNo</b> = '.str_replace($prefix,'',mysql_errno()).
                                       
    '<li><b>Error</b>   = '.str_replace($prefix,'',mysql_error()).
                                       
    '<li><b>Query</b>   = '.str_replace($prefix,'',$db).'</ul>');
      return 
    $qry;
    }
    ?> 
    Die Autoren zu kontaktieren hat bisher zu keinem ergebnis geführt, suche per google/foren führte zu folgendem ergebniss :
    Eine variable ist nicht definiert was sie aber sein sollte, auch anleitungen hierzu(variable vor-definieren, string, 0 etc.) haben bisher nicht zum gewünschten ergebnis geführt.

    Durch weitere nachforschungen sieht es bisher so aus das obiges PHP-script kompatibel zu PHP 5.3.9 ist (zb. mysql_connect, mysql_select_db)

    Demnächst sollte ein PHP update auf 5.3.10 folgen(sicherheitsfix), ob dies zur behebung des fehlers führt bleibt abzuwarten.

    Ich setze daran das problem zu lösen in dem die betroffene variable vor-definiert wird, allerdings habe ich bisher keine funktionierende lösung gefunden.

    Wenn ihr sonst noch infos braucht bitte euere fragen posten, danke !

    Nachgereichte Infos :
    Apache/2.2.9 (Debian) DAV/2 SVN/1.5.1 PHP/5.3.9-1~dotdeb.2 with Suhosin-Patch mod_python/3.3.1 Python/2.5.2 mod_ssl/2.2.9 OpenSSL/0.9.8g Server

  • #2
    Ersetze das->
    PHP-Code:
    if($installation
    durch das
    PHP-Code:
    if(isset ($installation)) 

    Kommentar


    • #3
      Ok also die fehlermeldung ist jetzt weg dadurch, allerdings funktioniert die webseite nachwievor nicht.
      Sie öffnet sich und bleibt komplett weis, auch quelltext ist nachwievor nicht anzeigbar.

      Kommentar


      • #4
        also - diese Änderungen sind meist etwas umfangreicher ... der Code "riecht" zumindest nach register_globals = on, das ist aber schon seit halben Ewigkeiten auf Off gesetzt - daneben werden sinnvolle Fehler unterdrückt.

        Du müsstest zumindest mal die @-Zeichen entfernen, um zu sehen ob es an der Datenbankverbindung liegt. Daneben .. und da wirds kompliziert .. müsstest du versuchen herauszufinden, woher Variablen wie eben $installation wirklich kommen sollen - in der Beziehung war der Tipp von trollface noch nich das "Gelbe vom Ei" .. ich vermute ja, dass es aus einem der Superglobalen Arrays stammt.

        Aber das kann man bei dem kurzen Code-Schnipsel wirklich nicht sagen.

        Schalte wenigstens mal am Anfang jedes PHP-Scriptes das Error-Reporting ein, solange du den Fehler suchst

        Zum Thema Register-globals ... wenn es auf "on" steht, werden für sämtliche Post / Get / Cookie Variablen automatisch globale Variablen erstellt, was natürlich eine Sicherheitslücke erster Güte darstellt - wenn diese Einstellung auf off steht, musst du deinen gesamten Code zu rate ziehen und ermitteln, woher jede deiner Variablen wirklich stammt - etwa aus einem form method="post" -> $_POST['feldname'] oder als URL-Parameter $_GET['parameter'] und genau so bei Cookie-Variablen ...das ist nicht ganz einfach, dort den Überblick zu behalten

        Kommentar


        • #5
          Ergänzend zu:

          Zitat von eagle275 Beitrag anzeigen
          also - diese Änderungen sind meist etwas umfangreicher ... der Code "riecht" zumindest nach register_globals = on, ...

          ... Daneben .. und da wirds kompliziert .. müsstest du versuchen herauszufinden, woher Variablen wie eben $installation wirklich kommen sollen ... ich vermute ja, dass es aus einem der Superglobalen Arrays stammt.
          Wenn keine speziellen Tricks (wie extract() usw.) angewandt wurden, sollte sich $installation also in $_POST finden lassen. Ein
          PHP-Code:
          ksort($_POST);
          var_dump($_POST); 
          am Anfang des Scripts listet die POST-Variablen auf. Findet sich dort kein Eintrag 'installation', kommt die Variable $installation woanders her[0], oder du musst dich im aufrufenden Script auf die Suche nach einem HTML-Formular machen, das vergessen hat, dieses Feld zu setzen.

          Das Gleiche gilt prinzipiell auch für $_GET, aber da müsste man 'installation' schon im Query-String (also bspw. in der Adressleiste des Web-Browsers) sehen können.

          --
          [0] Möglicherweise aus dem Script, welches dein gepostetes Teilstück inkludiert. In Zeile drei steht
          PHP-Code:
          require_once(basePath."/inc/mysql.php"); 
          Die Konstante 'basePath' muss vorher irgendwo definiert worden sein, sonst würdest du eine ähnliche Fehlermeldung zu sehen bekommen wie bei nicht deklarierten Variablen.

          Kommentar

          Lädt...
          X