[PHP5] Funktion innerhalb des Skripts umbenennen?

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

  • [PHP5] Funktion innerhalb des Skripts umbenennen?

    Hi!

    Ich bin Entwickler von dem Browsergame Krieg der Galaxien ( http://www.k-d-g.net ).

    Ich stehe nun vor de rProblematik, das sich anfangs nicht genug an logs gedacht habe.

    Mein Problem:
    Ich möchte alle MySQL-Abfragen, ausser SELECTs loggen.
    Dazu müsste ich nun aber die Funktion mysql_query umbenennen, und eine neue mysql_query schreiben, die loggt und dann abfrage startet.

    Ich habe eine Funktion kdglog(), die mir einen gegebenen String in eine Datei schreibt.
    Nun habe ich diesen Versuch erfolgreich durchgeführt (nach installation von dem PECL Paket apd):
    PHP-Code:
    rename_function('mysql_query''mysql_unlogged_query');
    function 
    mysql_logged_query($query$log=true$line=0$file=0) {
        if (
    $file == 0$file $_GLOBALS['file'];
        
    $split explode(' '$query2);
        if (
    $split[0] == 'SELECT' || $split[0] == 'Select' || $split[0] == 'select') return mysql_unlogged_query($query);
        
    kdglog($query.' || Line: '.$line$file'./logfiles/');
        
    //meldung($query." @ ".$line." in ".$file);
        
    return mysql_unlogged_query($query);
    }
    rename_function('mysql_logged_query''mysql_query'); 
    Leider benennt rename_function() die funktion Systemweit um. Ich benötige diese veränderte Funktion jedoch nur innerhalb des skripts, wo sie umbenannt wird.
    Das problem: Systemweite Änderungen beeinflussen ein ganzes Netzwerk an Internetseiten (GlobalGamePort)

    Welche Möglichkeiten habe ich dies umzusetzen, oder ist das nicht möglich?

  • #2
    Völlig falscher Ansatz - du solltest direkt auf den MySQL-Server gehen.
    Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

    Kommentar


    • #3
      Erstmal danke für die antwort.

      Problem: Auf dem server sind die datenbanekn, deren zugriffe geloggt werden sollen etwa 3% von allen.

      Auf dem server gehen pro sekunde 10-50 MySQL-Abfragen durch.
      Das macht ne riiiiesen log ;-)

      deshalb will cih auch nur die loggen, die wichtig sind. und das sin die abfragen, ausser select, die von KDG selbst erzeugt werden.

      Kommentar


      • #4
        Hi Alex!
        ich habe kein Antwort auf deine Frage, da ich mit umbenennen von Funktionen keine Erfahrung habe.
        Ist es nicht einfacher 3% von deinen mysql_query Aufrufe einfach durch eine neue funktion zu ersetzen, die zbs mysql_logged_query heist?
        Slava
        bituniverse.com

        Kommentar


        • #5
          Da haste was falsch verstanden:

          dieser Mysqlserver hat ca 130 DBs. davon gehören 3% zu KDG.
          KDDG macht pro sekunde ca 5 Querys an die DBs. Der rest ist unwichtig für uns.
          Von diesen 5 Querys müssten auch nur 2-3 geloggt werden.

          Also sagen wir ca 90% der Logfile wäre Datenmüll.

          Deshalb meine individuelle log.

          Problem: Das ändern des funktionsaufruf würde ca eine woche lang dauern.

          ~ 400 Dateien zu durchwühlen

          Kommentar


          • #6
            Original geschrieben von dark alex
            Problem: Das ändern des funktionsaufruf würde ca eine woche lang dauern.

            ~ 400 Dateien zu durchwühlen
            suchen und ersetzen in dateien dauert nicht so lange.

            Kommentar


            • #7
              Selbst das Schreiben eines Scripts dafür dauert nur 2 Minuten.
              PHP-Code:
              <?php
              foreach(glob('/srv/www/htdocs/kdg/*.php') as $filename) {
                  
              $file file_get_contents($filename);
                  
              $file preg_replace('/mysql_query\s*\(/U''mysql_logged_query('$file);
                  
              file_put_contents($filename$file);
              }
              ?>
              EDIT:
              Forum frißt Backslashes!

              Kommentar


              • #8
                Jo! Danke!

                Ich hab mir was gebastelt, was mir in jede datei oben rein die funktionsdatei includiert.

                Somit kann ich dann alles ersetzen.

                Kommentar


                • #9
                  Ich sag mal, scheiß Applicationsdesign. Hättet ihr eine Klasse für die Kapselung der Funktionen verwendet, wäre das jetzt wahrscheinlich lange kein so großes Problem! Aber das ist ein anderes Thema

                  Kommentar


                  • #10
                    Naja an die Problematik hat anfangs keiner gedacht.

                    Leider.

                    Kommentar

                    Lädt...
                    X