fsockopen problem (seite hängt fest)

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

  • fsockopen problem (seite hängt fest)

    Hallo

    Kurze Einleitung:

    Ich nutze:

    $fp = @fsockopen($url, $port, $errno, $errstr, 10);

    um übers Internet auf eine Application auf meinem PC zu connecten, auf die man per telnet zugreifen kann.

    Nun funktioniert das Befehle senden perfekt z.B. fwrite($fp, "/activatelog\r\n"); wird auch von der Application ausgeführt.

    fgets($fp); funktioniert ebfenfalls wunderbar.

    Das Windows Programm schreibt "log zeilen" die man per telnet abrufen kann, aber nur wenn man connected ist.

    Ich möchte nun alles was das programm schreibt, per php abrufen und auf meinem Server mit "echo" ausgeben.

    Die "log" anzeige sollte ca. alle 5 sekunden aktualisiert werden.

    Nun aber zu dem Problem:
    Wenn ich folgenden code nutze:

    fwrite($fp, "/log all\r\n");
    while (!feof($fp) && $str = fgets($fp)) {
    echo $str;
    }
    }
    Wird die Seite nicht zuende geladen, weil es theoretisch keinen FEOF gibt...


    benutze ich im while zusätzlich

    if (false !== strpos($str, ' ')) {
    break;}

    Bricht er ab wenn im moment nichts mehr gesendet wird, ist auch okay so.

    Nun das große Problem ist, das nur der Bruchteil ausgegeben wird, in dem das Script zum Programm connected ist.
    In den 5 Sekunden bis zum "refresh" loggt das windows programm aber weitere sachen, die aber dann nicht in der ausgabe erscheinen, da das php script zu der Zeit nicht connected ist.

    Nun ist meine Frage ob es möglich ist in Php die "$fp = @fsockopen" connection aufrecht zuerhalten und parallel (immer wenn eine neue zeile auftaucht) mit fgets die sachen z.b. in ein textfeld zu loggen?
    Alle meine Versuche haben dazu geführt, das die Seite dann nicht geladen wurde weil er in der "while" schleife festgesteckt ist.

  • #2
    Du könntest im Hintergrund ein php-Skript immer laufen lassen, was alle X Sekunden vom Server neu einliest und in eine Datei schreibt (sleep hilft); das frontend liest die Datei aus und leert sie wieder

    fopen/fclose nicht vergessen, damit die Skripte abwechselnd auf die Datei zugreifen können

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

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

    Kommentar


    • #3
      Ja verstehe in etwas was du meinst, nur wie soll das im "hintergrund" laufen?

      Kommentar


      • #4
        zeitlimit abstellen und einmal ausführen. im skript gibt es dann ein while(true) { ... } konstrukt, das die operation so und so ausführt und für 60 sekunden schlafen geht.

        Kommentar


        • #5
          okay klar,

          aber das ist ja das was ich meinte, dass man dann immer 2 seiten offen haben muss.

          Eigentlich nicht sehr nutzer freundlich ;O

          Kommentar


          • #6
            nein, muss man nicht. dein "dämon"-skript sollte serverseitig über eine shell angestoßen werden.

            Kommentar


            • #7
              gut klar,
              wenn ich nun aber mehrere user für das script habe, und die kein shell zugriff haben wird mir wohl nichts anderes übrig bleiben als das mit den 2 seiten in erwägung zu ziehen.


              oder kann man mit einem befehl das script serverseitig starten (im php code)

              Kommentar


              • #8
                system() etc.

                Kommentar


                • #9
                  Dankesehr

                  Ich hab das nun mal getestet indem ich 2 Seiten aufgemacht habe,
                  eine die alles in eine .txt datei loggt und die andere liest beim "refresh" den inhalt aus der .txt datei.

                  Aber sobald ich die Seite mit der Endlos schleife geöffnet habe (habe die php timeouts alle hochgeschraubt) läd die andere seite nicht mehr nach einem refresh.

                  Kann der Server immer nur ein php script gleichzeitig ausführen... oder an was liegt das?
                  bzw. wie kann ich das ändern?

                  MfG und DAnke

                  Kommentar


                  • #10
                    du hast irgendwas falsch gemacht.

                    Kommentar

                    Lädt...
                    X