Ankündigung

Einklappen
Keine Ankündigung bisher.

einzelnes Zeichen von Tastatur lesen

Einklappen

Neue Werbung 2019

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

  • einzelnes Zeichen von Tastatur lesen

    Guten Abend !
    Ich bin recht neu in php und verzweifle gerade.
    Ich will nur ein einziges Zeichen von der Tastatur lesen, ohne ENTER zu betätigen. fgetc hat meine Hoffnungen nicht erfüllt. ncurses scheint die gesamte Bildschirmausgabe "auf den Kopf" zu stellen. 2 Tage googeln und Lesen haben nichts gebracht.
    Ich benutze php 5.2.5, cli unter SuSE 10.2.

    Es hängt sicher auch mit dem OS zusammen. Mit ncurses geht es aber prinzipiell, nur dass die gesamte (mehr oder weniger auf echo basierende) Ausgabe völlig durcheinander kommt. Ich kann mir auf der anderen Seite nicht vorstellen, dass noch jiemand dieses ja relativ einfache Problem gelöst hat.
    Kann mir bitte jemand einen Tip geben?

    Vielen Dank!
    Micha

  • #2
    Hi,

    seh ich das richtig das du ein Konsolenprogramm mit PHP schreiben willst?

    Gruß
    CyCap

    Kommentar


    • #3
      ... ja, das siehst Du richtig.

      Kommentar


      • #4
        Was heisst denn

        fgetc hat meine Hoffnungen nicht erfüllt

        Kommentar


        • #5
          Zitat von cycap Beitrag anzeigen
          Was heisst denn
          fgetc hat meine Hoffnungen nicht erfüllt
          Na das es sich nicht so verhält wie er erhofft hat


          Ich hab auch mal 'ne Weile lang nach einer Lösung gesucht, aber leider habe ich damals auch nix gefunden. Nur immer wieder Foren-Beiträge in denen es anderen genauso erging

          Danke für den Hinweis mit ncurses, muss ich mir mal ankucken.
          [URL="https://www.quizshow.io/"]Create your own quiz show.[/URL]

          Kommentar


          • #6
            Achso das ENTER is das Problem... hmm knifflig

            Kommentar


            • #7
              Hallo in die Runde!

              Ich war ein paar Stunden außer Haus und lese gerade die Post's.
              Richtig erkannt war fgetc gibt zwar nur ein Zeichen zurück, allerdings erst nach ENTER.
              Das Problem scheint wirklich aus dem Betriebssystem (hier Linux) zu kommen. Ich hatte zwischenzeitlich mal ein "externes" Programm (in C) getestet - das Ergebniss ist das selbe. getc gibt ein Zeichen erst nach ENTER zurück.

              Im Augenblick popeln wir an einem Hinweis, das BASH eine Möglichkeit haben soll, einzelne Zeichen aus dem Eingabepuffer zu lesen.
              Mal sehen, was dabei rauskommt.

              Trotzdem weiter bitte jeden Hinweis posten.
              Vielen Dank und schönen Feierabend!
              Micha

              Kommentar


              • #8
                einzelnes Zeichen von Tastatur lesen - gelöst

                Für alle die ein solches Problem mal haben hier eine Lösung:
                (getestet unter SuSE 10.3, PHP 5.2.5).
                Das Problem scheint betriebssystemabhängig zu sein.

                <?php
                // abspeichern der aktuellen tty-konfig - hat aber so nicht funktioniert
                // $default = system('stty -g');

                // aendern der stty-konfig, dadurch kommt fgetc sofort mit
                // dem aktuellen zeichen zurück
                system('stty -icanon min 0 time 1');

                do {
                $test = fgetc(STDIN);
                }
                while ($test =='');

                // zurueckschreiben der gespeicherten tty-konfig - hat so nicht funktioniert
                // system ('stty '.$default);

                // einstellen der standard-konfiguration für tty
                system ('stty sane');

                echo 'test'."\n"; // augabe des einzelnen zeichens
                // und nun noch mal einen string lesen
                $test2=fgets(STDIN,5);
                echo $test2;
                ?>

                Bis später!
                Micha

                Kommentar


                • #9
                  Interessant! Das heisst wohl man brauch für jedes System eine eigene Lösung oder?

                  Kommentar

                  Lädt...
                  X