[Hilfe] Seltsames Phänomen mit Firefox und PHP

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

  • [Hilfe] Seltsames Phänomen mit Firefox und PHP

    Hallo!

    Ich habe in meinem CMS diese Funktion:
    Code:
    $sql = mysql_query("SELECT * FROM modules");
    if(!empty($sql)) {
        if(mysql_num_rows($sql) > 0) {
            while($line = mysql_fetch_assoc($sql)) {
                ...
                if(!empty($line['module'])) {
                    include("modules/".$line['module']."/index.php");
                }
                ...
            }
        }
        mysql_free_result($sql);
    }
    Diese Funktion lädt mir Module in meine Seite. Nun habe ich mal (testweise) ein Modul mit den folgenden Zeilen:
    Code:
    $fp = fopen("C:\\text.txt", "a");
    if(fwrite($fp,1."\n")) {
        echo '<div style="background-color:#000000;color:#FFFFFF;">OK</div>';
    }
    fclose($fp);
    Das CMS läuft auf meinem Testrechner, auf dem ein Apache 2 mit PHP5 und MySQL5 läuft. Dabei läuft es auch über einen VirtualHost (www.cms.de). Rufe ich die Seite nun auf, wird eine Textdatei erstellt, die eine 1 enthält. Zusätzlich wird ein "OK" in einer Blackbox ausgegeben. Sind jedoch die folgenden Bedingungen erfüllt:

    - Der aufruf erfolgt über www.cms.de (nicht über Localhost, 192.168.0.1, etc).
    - Ich bin im CMS als Administrator eingeloggt
    - Ich rufe die besagte Seite mit dem Firefox auf

    Wird mir zwar auch das OK in der Blackbox ausgegeben, die Textdatei enthält jedoch gleich "zwei" 1.

    Es sieht so aus, als würde das Modul gleich zwei mal eingebunden werden, was wiederum nicht sein kann, da das OK in der Blackbox nur einmal ausgegeben wird.

    Und irgendwie bin ich nun grad mit meinem Latein am Ende. Ich würde ja noch verstehen, wenn ich irgendwo einen Fehler beim Coden gemacht hätte, und das Problem sich auf den Administrator Account beziehen würde. Es ist aber zugleich an den VirtualHost und an den Firefox geubnden, der ja wiederum kein Einfluss auf das Parsen des Scripts haben kann, da das ja Serverseitig passiert. Also scheint wohl mein Apache ne Macke zu haben, oder was ist da los?

    Hat schon jemand von Euch so ein Phänomen erlebt und weis ggf. eine Lösung für oder hat nen Tip für mich wie ich das Problem lokalisieren kann?

    Ein "echo $line['module']" in der oberen Funktion zeigt mir, dass das Modul der Seite NICHT zweimal zugewiesen wurde. Auch ein require_once statt des include hindert das Script nicht daran zwei mal eine 1 in die Textdatei zu schreiben.

    Hoffe mir kann irgendwer von Euch helfen. Danke schonmal...

  • #2
    Zeig mal evtl. noch deine VirtualHost-Direktiven her.
    [FONT="Helvetica"]twitter.com/unset[/FONT]

    Shitstorm Podcast – Wöchentliches Auskotzen

    Kommentar


    • #3
      NameVirtualHost 127.0.0.1

      <VirtualHost 127.0.0.1>
      ServerName www.cms.de
      DocumentRoot C:/AppServ/www/cms
      </VirtualHost>

      <VirtualHost 127.0.0.1>
      ServerName cms.de
      DocumentRoot C:/AppServ/www/cms
      </VirtualHost>

      Lustig ist im übrigen auch folgendes:
      Code:
      class test {
          public static $test = 0;
      
          function test() {
              $fp = fopen("C:\\text.txt", "a");
              fwrite($fp,1);
              fclose($fp);
              self::$test = 1;
          }
      
      }
      if(empty(test::$test != 1) {
          test::test();
      }
      Gibts trotzdem zwei 1, obwohl die Funktion ja nach dem ersten Aufruf ja eigentlich blockiert ist...

      Und ach ja, das Problem ist im übrigen einfach so aufgetreten, bestand also nicht immer...

      Kommentar


      • #4
        Nimm mal all das gepostete raus und ersetz es durch das:
        Code:
        <VirtualHost *>
        	ServerName [url]www.cms.de[/url]
        	ServerAlias cms.de [url]www.cms.de[/url]
        	DocumentRoot C:/AppServ/www/cms
        </VirtualHost>
        Ich halte es zwar für unwahrscheinlich, aber da du zweimal vHosts für 127.0.0.1 angegeben hast (was natürlich keinen Sinn macht), könnte es sein, dass FF aus irgend einem Grund auch beide ausgeliefert bekommt. Wie gesagt, ich halte es für sehr unwahrscheinlich und ich bin auch nicht grade ein Ass auf diesem Gebiet. Dennoch würde ich mal meine Direktive ausprobieren.

        ServerName ist nämlich nur der Name der in der Signatur angezeigt wird. ServerAlias bestimmt die Domains auf die Angesprungen werden soll.

        Und wenn ich mich irre: Sorry, ich bin verdammt müde

        Edit: SELECT * is evil!
        [FONT="Helvetica"]twitter.com/unset[/FONT]

        Shitstorm Podcast – Wöchentliches Auskotzen

        Kommentar


        • #5
          Hab ich mal gemacht. Problem ist weiterhin da. Auf dem Server meines Hosters besteht das Problem ebenfalls, warum auch immer...

          Kommentar


          • #6
            Das klingt so als wenn dein Rechner die Website einfach zwei Mal aufruft...
            Guck mal in die Access-Logs vom Webserver.

            Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

            bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
            Wie man Fragen richtig stellt

            Kommentar


            • #7
              Hm, das scheint in der Tat so. Habe mal die Seiten aufgerufen, und dann die Aufrufstatistik angeschaut. Die ist glatt um 3 Aufrufe hochgeangen (zwei von der Seite, eine vom reload der Seite mit den Statistiken).

              Code:
              [B]127.0.0.1 - - [14/Jan/2008:14:23:00 +0100] "GET /index.php?site=forum&f=3&t=1 HTTP/1.1" 200 7776[/B] 
              127.0.0.1 - - [14/Jan/2008:14:23:00 +0100] "GET /templates/default/style_forum.css HTTP/1.1" 304 -
              127.0.0.1 - - [14/Jan/2008:14:23:00 +0100] "GET /plugins/lightbox/js/prototype.js HTTP/1.1" 304 -
              127.0.0.1 - - [14/Jan/2008:14:23:00 +0100] "GET /plugins/lightbox/js/scriptaculous.js?load=effects HTTP/1.1" 304 -
              127.0.0.1 - - [14/Jan/2008:14:23:00 +0100] "GET /plugins/lightbox/js/effects.js HTTP/1.1" 304 -
              127.0.0.1 - - [14/Jan/2008:14:23:00 +0100] "GET /plugins/lightbox/js/lightbox.js HTTP/1.1" 304 -
              127.0.0.1 - - [14/Jan/2008:14:23:00 +0100] "GET /plugins/lightbox/css/lightbox.css HTTP/1.1" 304 -
              127.0.0.1 - - [14/Jan/2008:14:23:00 +0100] "GET /plugins/tinymce/jscripts/tiny_mce/tiny_mce.js HTTP/1.1" 304 -
              127.0.0.1 - - [14/Jan/2008:14:23:00 +0100] "GET /images/blank.gif HTTP/1.1" 304 -
              127.0.0.1 - - [14/Jan/2008:14:23:00 +0100] "GET /templates/default/images/headerbg.png HTTP/1.1" 304 -
              127.0.0.1 - - [14/Jan/2008:14:23:00 +0100] "GET /templates/default/images/1-topleft.gif HTTP/1.1" 304 -
              127.0.0.1 - - [14/Jan/2008:14:23:00 +0100] "GET /templates/default/images/1-bottomright.gif HTTP/1.1" 304 -
              [B]127.0.0.1 - - [14/Jan/2008:14:23:00 +0100] "GET /index.php?site=forum&f=3&t=1 HTTP/1.1" 200 7775[/B]
              In den Logs (nachdem ich sie gelöscht habe) taucht die besagte Seite in der Tat zwei mal auf. Aber warum zum Teufel ruft mein Rechner die denn zwei mal auf? Und dann eben nur mit dem Firefox und wenn ich als Administrator eingeloggt bin? Oo

              Kommentar


              • #8
                Original geschrieben von PHPler
                In den Logs (nachdem ich sie gelöscht habe) taucht die besagte Seite in der Tat zwei mal auf. Aber warum zum Teufel ruft mein Rechner die denn zwei mal auf? Und dann eben nur mit dem Firefox und wenn ich als Administrator eingeloggt bin? Oo
                ka?
                Fasterfox nur auf dem Admin-Konto installiert oder so ... was weiß ich, ist dein Rechner oO

                Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                Wie man Fragen richtig stellt

                Kommentar


                • #9
                  Ich glaube Adminkonto meint das den Admin des CMS. Was natürlich einen Fehler auch(!) dort vermuten lässt...
                  ICH BIN ICH!!!

                  Kommentar


                  • #10
                    Jo, meine das Administrationskonto im CMS. Aber das Ding ist eben, dass das nur mit dem Firefox der Fall ist. Wenn ich den IE oder Opera verwende passiert nichts, auch wenn ich als Administrator eingeloggt bin. Das ist nur beim Firefox der Fall.

                    Kommentar


                    • #11
                      Hast du Extensions im Firefox installiert?
                      Wenn ja, alle deaktivieren.

                      Noch mal versuchen?
                      Immer noch?

                      Passiert das auch bei anderen Seiten? Oder nur bei der index.php?
                      Wenn nur bei der index.php, lässt sich der Code soweit reduzieren, dass der Fehler nicht mehr auftritt?

                      Betreib doch mal Eingrenzung des Problems... ich versteh nicht, dass ich das immer wieder neu erklären muss, das ist doch irgendwie offensichtlich, dass man da was eingrenzen muss oO
                      Bisher ist das ja nun wirklich keine ausreichende Problembeschreibung... da kann ich genauso gut würfeln und sagen "Satan ist schuld, du hast gestern deinen Teller nicht leer gegessen".

                      Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                      bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                      Wie man Fragen richtig stellt

                      Kommentar


                      • #12
                        Aaaaaaaaaahhhhhhhhh...

                        Ich hab den Fehler gefunden. Ich hatte in einem Modul mehrere Links, die Grafikdateien als Link enthielten, und den Linktext als Alternativtext. Diese Links enthielten ein leeres src (es wurde also der alt text angezeigt). Da sie nur für Administratoren angezeigt wurden, kam damit auch der Fehler zu Stande. Aber aus irgendeinem Grunde veranlassten diese Links den Firefox die Seite ein zweites mal aufzurufen. Jetzt habe ich mal (vorrübergehend) irgendwas ins src geschrieben, womit sich das Problem erledigt hat...

                        Gott ist das gruselig...

                        Kommentar


                        • #13
                          Wahrscheinlich interpretiert der Firefox ein leeres src-Attribut als "lade das, was in der Adresszeile steht", lädt das, findet raus, dass das kein Bild ist, und zeigt das alt-Attribut an.

                          Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                          bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                          Wie man Fragen richtig stellt

                          Kommentar


                          • #14
                            Ja das kann angehen, wobei es mich wundert warum es bei 5 leeren srcs nicht 5 mal die Seite lädt. Aber egal, nun läuft ja alles wieder...

                            Kommentar


                            • #15
                              Ja das kann angehen, wobei es mich wundert warum es bei 5 leeren srcs nicht 5 mal die Seite lädt. Aber egal, nun läuft ja alles wieder...
                              OffTopic:
                              Das haben die OpenSource-Heinis extras so optimiert, dass das erkannt wird...

                              Kommentar

                              Lädt...
                              X