php med readline support kompileret til windows

Indlæg af Hanne Mølgaard Plasc

Problem



Er der nogen kompileret php-pakke med indbygget readline support?


Readline er påkrævet for at kunne bruge php i interaktiv tilstand.


Jeg kiggede på, hvordan man kompilerer php til windows, men de kræver MS Visual Studio, som jeg ikke har.

Bedste reference


Readline-udvidelse er ikke tilgængelig på Windows. Jeg tror, ​​det er muligt at kompilere PHP under cygwin muliggør --with-readline mulighed [8]

Andre referencer 1


    //The readline library is not available on Windows.

<?php
       if (PHP\_OS == 'WINNT') {
           echo '$ ';
           $line = stream\_get\_line(STDIN, 1024, PHP\_EOL);
        } else {
                 $line = readline('$ ');
               }
 ?>


Jeg fandt denne kode lige ud af php-dokumentationen. Som du måske ser, er der ingen støtte til læsebiblioteket i Windows-maskiner (i det mindste i en ddefault-pakke), som suger, men du kan få noget lignende ved at lave '$ line=blah, blah' i koden ovenfor.


Jeg prøvede det og fik det til at fungere ved hjælp af vinduets standard cmd (selv om jeg tror, ​​at den interaktive php-tilstand ikke virker i Windows, uanset hvad) men det er bedre end ikke at have nogen brugerindgang (hvis du faktisk husker alle den kode).

Andre referencer 2


Det kan være lidt sent, men her er løsningen der løste dette problem for mig: I stil med C # s Console skrev jeg en lille klasse, der kan gøre en readLine() såvel som en writeLine($str):


class Console {
    const READLINE\_MAX\_LENGTH = 0xFFFF;
    const WRITELINE\_NEWLINE = "
";

    private static /*Resource*/ $stdin;
    private static /*Resource*/ $stdout;

    public static function /*void*/ close () {
        fclose(self::$stdin);
        fclose(self::$stdout);
    }

    public static function /*void*/ open () {
        self::$stdin = fopen('php://stdin', 'r');
        self::$stdout = fopen('php://stdout', 'w');
    }

    public static function /*string*/ readLine () {
        return stream\_get\_line(self::$stdin, self::READLINE\_MAX\_LENGTH, "
");
    }

    public static function /*void*/ writeLine (/*string*/ $str) {
        fwrite(self::$stdout, $str);
        fwrite(self::$stdout, self::WRITELINE\_NEWLINE);
    }
}


Eksempel brug:


Console::open();
echo "Input something: ";

$str = Console::readLine();
if (is\_string($str))
    Console::writeLine($str);
else
    echo "ERROR";

Console::close();





EDIT: Denne metode virker selvfølgelig kun, hvis moderprocessen ikke ændrer STDOUT eller STDIN.

Andre referencer 3


I betragtning af svaret fra galymzhan, ville en anden mulighed for at køre PHP i interaktiv tilstand på Windows være at bruge et af PHP REPLs. Du får ikke fanen færdiggørelse, da det afhænger af læsning.


Den REPL, der har arbejdet mig indtil videre, er PHP-Shell


http://jan.kneschke.de/projects/php-shell/[9]