Datei von entferntem Server laden dauert ewig...

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

  • Datei von entferntem Server laden dauert ewig...

    Hallo zusammen,

    ich habe ein Text-File auf einem anderen Server liegen, zu dem ich keine Zugangsdaten habe. Ich möchte also nur das Textfile öffnen. Ich kann aber nicht zu jeder Zeit mit Sicherheit sagen, daß dieses File existiert. Wenn es existiert, soll der Inhalt ausgegeben werden, wenn es nicht exisitiert, soll eine Meldung ausgegeben werden, daß es nicht vorhanden ist. So weit die Theorie.

    In der Praxis habe ich das mit file() versucht. Wenn file() etwas zurückgibt, kann ich ebenfalls mit file() die Datei auslesen, wenn nicht gebe ich die Meldung aus, daß die Datei nicht vorhanden ist.
    Das doofe ist jetzt, daß der Aufruf der Seite plötzlich 5(!) Sekunden dauert, dann aber das richtige ausspuckt. Weiß vielleicht jemand, wo hier das Problem liegen könnte?

    Hab hier mal einen Auszug aus dem Skript:
    PHP-Code:
    if(@file($file_location_server_metar)){
            
    $info_metar file($file_location_server_metar);

            
    $info_metar_array '';
            for(
    $i 1;$i sizeof($info_metar);$i++)
                
    $info_metar_array .= trim($info_metar[$i]).'<br>';

            
    $ausgabe str_replace("<!--metar-->"trim($info_metar[0])." - ".$info_metar_array$ausgabe);
        }
        else{
            
    $ausgabe str_replace("<!--metar-->""Kein METAR verf&uuml;gbar.<br>"$ausgabe);
        } 
    Wäre super, wenn mir jemand helfen könnte. Danke!

    Grüße, Heppi.

  • #2
    Re: Datei von entferntem Server laden dauert ewig...

    Nun, schon allein das zweimalige Einlesen der Ressource dürfte der Gesamtperformance wohl nicht unbedingt förderlich sein.
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      Re: Re: Datei von entferntem Server laden dauert ewig...

      Original geschrieben von wahsaga
      Nun, schon allein das zweimalige Einlesen der Ressource dürfte der Gesamtperformance wohl nicht unbedingt förderlich sein.
      Hm, aber wie kann ich das ganze besser lösen? Und wäre ich ja immer noch bei über zwei Sekunden.

      Kommentar


      • #4
        kann aber nicht zu jeder Zeit mit Sicherheit sagen, daß dieses File existiert
        Könntest z.B. ja bevor du file() und Co verwendest, mal einen Socket zum entfernten Server öffnen und einen HEAD request nach dem Textfile absetzen. Als Antwort wirst du dann entweder 200 für ok oder irgendwat anderes für nicht okay erhalten.
        Und file() schickst du erst ins Rennen wenn der Request bestätigt hat, dass die Datei dort liegt (wobei du dann auch gleich das File mittels socket Verbindung holen könntest)
        -fsockopen()
        -fputs()
        -fgets()
        -fclose()

        könnten als Stichworte für eine Manualsuche herhalten

        Gruss

        tobi
        Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

        [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
        Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

        Kommentar


        • #5
          Re: Re: Re: Datei von entferntem Server laden dauert ewig...

          Original geschrieben von Heppi
          Hm, aber wie kann ich das ganze besser lösen?
          Das Problem "Huch, dummerweise lese ich die Ressource zwei mal ein" löst du natürlich dadurch, dass du diesen Unfug unterlässt.

          PHP-Code:
          if(false !== foo()) {
            
          $bar foo();
            
          do_something_with($bar); 
          ist doch wohl für einen Menschen, der mal kurz logisch nachdenkt, das gleiche wie
          PHP-Code:
          if(false !== ($bar foo())) {
            
          do_something_with($bar); 
          I don't believe in rebirth. Actually, I never did in my whole lives.

          Kommentar


          • #6
            Original geschrieben von jahlives
            Könntest z.B. ja bevor du file() und Co verwendest, mal einen Socket zum entfernten Server öffnen und einen HEAD request nach dem Textfile absetzen. Als Antwort wirst du dann entweder 200 für ok oder irgendwat anderes für nicht okay erhalten.
            Und file() schickst du erst ins Rennen wenn der Request bestätigt hat, dass die Datei dort liegt (wobei du dann auch gleich das File mittels socket Verbindung holen könntest)
            -fsockopen()
            -fputs()
            -fgets()
            -fclose()

            könnten als Stichworte für eine Manualsuche herhalten

            Gruss

            tobi
            Hab da jetzt mal ein bißchen was dazu gelesen und versucht das umzusetzen. Klappt aber irgendwie nicht. Hier mal der Code.
            PHP-Code:
            <?php
                $server 
            "tgftp.nws.noaa.gov";

                
            $socket fsockopen($server21);

                if(
            $socket){
                    
            $RequestHeader "GET /data/observations/metar/stations/EDDF.TXT HTTP/1.0\r\n\r\n";

                    
            $OK fputs($socket$RequestHeader);

                    
            $test fgets($socket4096);

                    echo(
            $test.'*');
                }
                else{
                    echo 
            "Shit...";
                }
            ?>
            Die Antwort vom Server sieht folgendermaßen aus:
            220 Authorized users only. All activity may be monitored and reported.
            Klappt das ganze nach dem Prinzip so nicht oder was mache ich hier falsch?

            Danke für eure Hilfe.

            Grüße, Heppi.

            Kommentar


            • #7
              Authorized users only.
              Sagt doch alles, oder?

              Kommentar


              • #8
                Original geschrieben von pekka
                Sagt doch alles, oder?
                Ich kapier's nur nicht mehr, weil das von allen so klingt als sei das ganz sebstverständlich, daß das funktionieren muß...

                Kommentar


                • #9
                  Ok, hab's geschafft - hab noch einen HTTP-Link zum gleichen File gefunden. Damit geht's.

                  Jetzt bin ich aber gleich auf's nächsten Problem gestoßen. Erst mal der Return:
                  HTTP/1.1 200 OK
                  Date: Tue, 31 Jul 2007 21:06:32 GMT
                  Server: Apache/2.0.52 (Red Hat)
                  Last-Modified: Tue, 31 Jul 2007 18:55:18 GMT
                  ETag: "16aaaf3-40-c01c1180"
                  Accept-Ranges: bytes
                  Content-Length: 64
                  Connection: close
                  Content-Type: text/plain; charset=UTF-8

                  2007/07/31 18:50
                  EDFM 311850Z 06004KT 030V090 CAVOK 17/05 Q1020
                  Wie bekomme ich denn jetzt den eigentlichen Inhalt der Antwort heraus? Er beginnt da bei 2007/07/31 ...
                  Ich hab zwar alles in einem Array, aber die Größe des Headers ist auch nicht immer gleich. Ist da immer eine Leerzeile zwischen Header und Inhalt? Und ist das die einzige?
                  Zuletzt geändert von Heppi; 31.07.2007, 22:11.

                  Kommentar


                  • #10
                    Wenn du mal das ansehen würdest, was du zurück bekommst, und nicht das was der Browser anzeigt. Also in den (HTML-)Quelltext deiner Antwort. Dann erkennst du auch ganz deutlich, wo der Header aufhört und wo dein gewünschter Inhalt anfängt.

                    Das Abzufragen dürfte dann wohl eine Kleinigkeit sein. (Die du natürlich erstmal selbst versuchst und nicht direkt wieder im Forum nach einer Antwort fragst. Dafür sind Foren nämlich NICHT da.

                    Kommentar


                    • #11
                      Ist da immer eine Leerzeile zwischen Header und Inhalt? Und ist das die einzige?
                      ja, genau. Die einzige ist es natürlich nicht zwangsweise. Aber die erste.

                      Kommentar

                      Lädt...
                      X