2012-03-22 9 views

答えて

4

Readline拡張機能はWindowsでは利用できません。 cygwinでPHPをコンパイルすることが可能です--with-readlineオプション

+0

私が長年求めてきた質問は、なぜWindowsではこの基本的で不可欠な機能が利用できないのですか? OSが何も同等のものを提供しないなら、確かにそれをエミュレートすることができます。 –

+1

5年後、PHP v7.1のreadlineからWindowsで利用可能になりました – icc97

0

galymzhanからの回答を考慮すると、Windowsで対話モードでPHPを実行する別のオプションは、PHP REPLのいずれかを使用することです。あなたはreadlineに依存しているので、タブの補完は得られません。

これまでの私のために働いたREPLはPHPシェル

http://jan.kneschke.de/projects/php-shell/

+0

ウェブサイトがダウンしました:( – icc97

2
//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('$ '); 
       } 
?> 

である私はストレートPHPのドキュメントのうち、このコードを発見しました。ご覧のとおり、Windowsマシンのreadlineライブラリはサポートしていません(少なくともddefaultパケットの場合)。このコードは上記のコードで "$ line = blah、blah"を実行することで同様のことができます。

私はそれを試してみましたが、ウィンドウの標準のcmdを使って動作させました(ただし、インタラクティブなphpモードは何に関係なくWindowsでは動作しません)。しかし、実際にはそのコード)。

1

これは少し遅れるかもしれませんが、ここでは私のために、この問題を解決するソリューションです:C#のConsoleのスタイルでは、私はreadLine()と同様にwriteLine($str)を行うことができます少しクラスを書いた:

class Console { 
    const READLINE_MAX_LENGTH = 0xFFFF; 
    const WRITELINE_NEWLINE = "\n"; 

    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, "\r\n"); 
    } 

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

使用例:

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

$str = Console::readLine(); 
if (is_string($str)) 
    Console::writeLine($str); 
else 
    echo "ERROR"; 

Console::close(); 

はEDIT:この方法は明らかにのみトン場合は、動作します親プロセスはSTDOUTまたはSTDINを変更しません。

関連する問題