Ankündigung

Einklappen
Keine Ankündigung bisher.

CLI, Command line Eingabe während der Laufzeit

Einklappen

Neue Werbung 2019

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

  • DerDesian
    hat ein Thema erstellt CLI, Command line Eingabe während der Laufzeit.

    CLI, Command line Eingabe während der Laufzeit

    Hi,

    Hab mal ne Frage zu PHP und CLI:

    Wenn ich ein Script laufen lasse, kann an einer Stelle eine Eingabe einfordern
    PHP-Code:
    echo "Gib was ein: ";
    if(
    $stdin fopen("php://stdin","r")) {
        
    $input trim(fgets($stdin));
        
    fclose($stdin);
    }

    echo 
    "\n".'Du hast'.$input.'eingegeben'."\n"
    Gibt es in PHP eine Möglichkeit, dass er (zB eine schleife) immer weiter macht aber auf die Eingabe des Benutzers reagieren kann.
    Wenn ich also ENTER drücke er den Inhalt in die Variable $input schmeißt, weiter nix. Wenn der das nächste mal $input abprüft soll er dann einfach nur den neuen, eingegebenen Wert haben.

    Ich weiß, PHP ist eigendlich als zustandsloses Dingens gedacht.
    Mich interessiert aber, ob es die Möglichkeit gibt.

    Gruß
    Der Desian

  • Basti
    antwortet
    Oh, das mt der Session geht wohl nicht. Anscheinend wird diese zwischen session_start() und dem
    Ende des Skriptes für andere Prozesse gelocked. Da müsstest du dir wohl einen eigenen Session
    Handler schreiben.

    Basti

    Einen Kommentar schreiben:


  • DerDesian
    antwortet
    K, da sind 2 gute Ansätze.
    Ich werde beiden nachgehen.
    Ich denke, das trifft es, wenn nicht meld ich mich nochmal.

    Danke!

    Gruß
    Der Desian

    Einen Kommentar schreiben:


  • Basti
    antwortet
    Achso. In dem Fall hilft nur ein zweites Skript, dass entweder direkt
    selbst auf Daten vom Hauptprozess zugreift (Dateien/Datenbank/Shared
    Memory) oder diesem über diesen Weg Nachrichten zuschiebt, die sich
    dieser dann eben dauernd anschauen muss und dann darauf reagieren
    kann (und seinerseits dem Beobachter-Prozess ein Päckchen auswirft).

    Für Ersteres könnte es z.B. sinnig sein, ein Status-Objekt in eine Session
    zu werfen, auf das das Beobachter-Skript zugreift. Für letzteres könnten
    Ticks[1] vielleicht hilfreich sein. Bleibt natürlich die Frage, wie weit du den
    eigentlichen Prozess verlangsamen möchtest, blos um informiert zu sein,
    wie lange er noch anhält.

    [1] http://php.net/manual/en/control-str....declare.ticks

    Basti

    PS @Agundur:
    Diese Umsetzung eines Dispatchers ändert ja nichts daran, dass PHP
    keine Multithread-Eigenschaften besitzt.

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    Evtl. hilft Dir das weiter

    http://pear.php.net/manual/de/packag...dispatcher.php

    Einen Kommentar schreiben:


  • DerDesian
    antwortet
    Hi,

    dann steht das Script aber an der Eingabe.
    Das soll es ja grad nicht.
    Was sich suche ist quasi so ne Art ThreadMode für PHP.

    Beispiel:
    Ich parse gerade ein 240MB-File nach bestimmten kriterien in die DB.
    Zwischendurch wird interesant, wie weit er ist, wieviel er in die DB geschrieben hat, was er ausgelassen hat, etc.
    Nun möchte ich eine Taste (oder auch Taste+Enter) bestimmen, bei dem mir die Werte ausgegeben werden.
    Unabhängig von dieser Eingabe soll er weiter das File in die DB parsen.

    Ich bin mir einfach nicht ganz sicher ob das unmöglich ist.
    Vieleicht gibt es unter PHP auch eine ProzessControling-Möglichkeit.

    Gruß
    Der Desian

    Einen Kommentar schreiben:


  • Basti
    antwortet
    Pack das einfach in eine Schleife. Die Eingaben landen auf dem Stapel...
    PHP-Code:
    #!/usr/bin/php
    <?php
    $sPrompt 
    ": ";
    if(!
    $rStdin fopen("php://stdin","r")) die();

    $bExit false;

    do {
        echo 
    $sPrompt;
        
    $sInput trim(fgets($rStdin));
        if (
    $sInput == 'exit'$bExit true;
        
    doSomething($sInput);
        } while (!
    $bExit);
    fclose($rStdin);


    function 
    doSomething($sInput) {

        echo 
    "Du hast '$sInput' eingegeben\n";
        
    //sleep (3);
        
    return;
    }
    ?>

    Einen Kommentar schreiben:

Lädt...
X