Localhost und Apache bei fopen -> Absturz

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

  • Localhost und Apache bei fopen -> Absturz

    Hallo Leute,

    ich betreibe den Apache bei mir als localhost um meine Script´s vorher zu testen bevor ich sie ins Netz stelle.
    Leider stürzt bei mir der Rechner immer ab wenn ich mit irgeneinen Befehl eine Datei öffnen möchte die nicht existiert. Da hilft nur noch der "Affengriff" zum Taskmanager.
    Kann mir jemand sagen was ich für Einstellungen am Apache vornehmen muß damit sowas nicht mehr passiert. Online tritt dieser Fehler ja auch nicht auf.

    Danke im Vorraus

  • #2
    Definiere "mit irgendeinem Befehl eine Datei öffnen"...

    CAT Music Files

    Kommentar


    • #3
      Unter welchem Betriebssystem? Ich nehm jetzt mal an Windows. Welche Apache-Version benutzt Du? Wäre es möglich, dass nicht fopen() selbst das Problem ist, sondern das Handling der aus der Datei eingelesenen Daten? Versuchst Du, auf Dateien über einen Netzwerkpfad zuzugreifen? Dann könnte es nämlich sein, dass Apache einfach nur dauernd versucht, diesen Pfad zu finden. (Wenn Apache als "reagiert nicht" angezeigt wird, muss das nicht heissen, dass er abgestürzt ist - er kann auch einfach so beschäftigt sein, dass er keine Zeit hat, dem Windows-Message-Queue bescheid zu geben).

      Kommentar


      • #4
        Hallo Sky,

        weiß leider nicht was Du damit meinst.

        Hallo pekka,

        ja ich benutze Windows 98SE und Apache 1.3.20, PHP 4.0.5 und Perl 5.0. Außerdem greife ich schon über einen Netzwekpfad zu (http://localhost/blabla).
        Nun gut, kann sein das er nicht abgestürzt ist, sondern nur andauernd probiert ob was da ist. Aber ich muß doch ein Timeout oder so definieren können oder? Wenn ich das Script online stelle gibt es den Fehler ja auch nicht. Sondern ich bekommen von PHP eine Fehlermeldung.

        Kommentar


        • #5
          Hmmm... Steht in den Logs (apache: error.log php: php.log) was dazu?

          Kommentar


          • #6
            Hallo pekka,

            ich habe das jetzt ausgiebig getestet.
            In meinem Beispiel versuche ich eine externe URL (Datei) zu lesen. Bin aber nicht online! DFÜ will sich einwählen, was ich aber ignoriere.

            Fehler in php /log.txt
            ----------------------
            PHP Warning: php_network_getaddresses: gethostbyname failed in c:\apache\htdocs\index.php on line 22
            PHP Warning: fopen("http://www.domain.de/datei.shtml","r") - No error in c:\apache\htdocs\index.php on line 22
            PHP Fatal error: Maximum execution time of 30 seconds exceeded in c:\apache\htdocs\index.php on line 22
            ----------------------

            In index.php -> "line 22" steht:

            $fd = fopen( $filename, "r" );
            if ($fd){
            $contents = fread( $fd, 30000);
            fclose( $fd );
            }

            Das System hängt!!!!!!

            Und das ist nun mein Problem. Ich kann nie meine Seite im Localhost testen, muß dazu immer meine PHP-Dateien ändern, was mit der Zeit nervt!
            Gibt es denn einen anderen Befehl mit dem ich abfragen kann ob ich online bin? Damit könnte ich mein Problem auch lösen.

            Wenn ich nun eine Datei im Localhost öffnen möchte die nicht existiert. Dann erhalte ich eine Fehlermeldung im Browser:

            #######################
            Warning: fopen("http://localhost/datei.htm","r") - No error in c:\apache\htdocs\index.php on line 22
            Keine Daten verfügbar
            #######################

            Und in der php /log.txt
            ----------------------
            PHP Warning: fopen("http://localhost/datei","r") - No error in c:\apache\htdocs\index.php on line 22
            ----------------------

            Das System hängt NICHT !!!!!!

            Kommentar


            • #7
              1. So vermeidest Du die Ausgabe der Errormeldung:
              Code:
              @$fd = fopen($filename, "r"); 
              if ($fd){ 
              	$contents = fread( $fd, 30000); 
              	fclose( $fd ); 
              } else {
              	print " $filename nicht verfügbar, vermutlich bin ich offline";
              }
              2. Um zu prüfen ob Du online bist, empfehle ich das über einen PING zu Deinem Provider (kürzester Weg) abzuhandeln.
              Kann der Host nicht erreicht werden hat dies die PING-Antwort "Unbekannter Host ...." zur Folge.

              Um die PING-Antwort so kurz als möglich zu halten wird die Anzahl der zu sendenden Echoanforderungen auf 1 gesetzt:
              Code:
              $MyProvider = "www.ShortestWay2World2beQuick.de";
              $online=exec("ping $MyProvider -n 1");
              // print "online $online<br>\n"; 
              if (eregi("unbekannter host", $online)) {
              	print "Ich bin OffLine :(<br>\n";
              } else {
              	print "Ich bin OnLine :)<br>\n";
              }

              Kommentar


              • #8
                Hand hat da eine gute Lösung. Zum Hängen: Apache bleibt nicht hängen, er wartet nur auf die Rückmeldung von fopen()! Irgendwo müsste der Timeout für fopen einstellbar sein, ich hab nur keinen Schimmer wo... in der php.ini hab ich nix dazu gefunden. Vielleicht weiss jemand da mehr?

                Kommentar


                • #9
                  Übrigens, um festzustellen, ob mein Skript Lokal oder auf dem Server liegt, behelf ich mir folgendermassen:

                  if (strstr($SCRIPT_FILENAME,"c:/programme/server/php/php.exe"))
                  $server = false;
                  else
                  $server = true;

                  Kommentar


                  • #10
                    Ja Danke

                    Ich werde das alles gleich mal ausprobieren! Sieht alles logisch aus.

                    Kommentar


                    • #11
                      Also ich wieder mal,

                      zu "hand" seinem ersten Vorschlag.
                      Kann ja nicht in meinem Fall funktionieren, weil

                      @$fd = fopen($filename, "r");

                      ja zu meinem Problem geführt hat.
                      Die zweite Lösung hat bei mir erst mal Windows mit einen "Blue Screen" quittiert. Also ups....
                      Außerdem finde ich auch nicht die Befehle in PHP.

                      ($online=exec("ping $MyProvider -n 1") -> "exec" und "ping" ????

                      Aber naja gut...

                      Die Lösung von pekka hat gleich auf Anhieb funktioniert und ich habe bei meinen Scripten diese Routine eingebaut.

                      Danke noch mal an alle!

                      bis0uhr

                      Kommentar

                      Lädt...
                      X