Как дополнение к ответу Gilles, кто предлагает перекомпилировать полный пакет PHP, можно также ожидать PHP 5.4. В 5,4 я реструктурировал readline функциональность, что все необходимые части находятся в readline модуле, таким образом, можно создать это одинокое.
$ wget ...php-5.4.0.tar.bz2
$ tar xjf php-5.4.0.tar.bz2
$ cd php-5.4.0/ext/readline
$ phpize && ./configure && make
Затем Вы закончите с a modules/readline.so
который может быть загружен из php.ini (make install
переместит его в extension_dir
)
Кроме того, дистрибьютор может поставить readline модуль (возможно, связанный против libedit, не readline), и интерактивный режим будет доступен.
Это все не поможет Вам теперь (как PHP 5.4. не отсутствует, еще), но мог бы помочь другим, находящим этот вопрос позже.
Еще некоторые детали о моем блоге: http://schlueters.de/blog/archives/133-Now-in-trunk-Improved-interactive-shell.html
Править: На самом деле сообщение в блоге является более старым, чем это изменение, но могло бы все еще быть интересным. Немного информации находится в отчете об ошибках № 53878, но не очень любой... после выпуска, http://php.net/commandline.interactive должен иметь больше.
Новый дескриптор файла всегда уже занимает самое низкое целое число, не используемое.
$ cat >test.c main(){exit(open("/dev/null",0));} ^D $ cc test.c $ ./a.out; echo $? 3 $ ./a.out <&-; echo $? 0 $ ./a.out >&-; echo $? 1
Система не заботится о "стандартных дескрипторах файлов" или чем-либо как этот. Если дескриптор файла 0 будет закрыт, то новый дескриптор файла будет присвоен в 0.
Есть ли любое место в Вашей программе или в том, как Вы запускаете его, который может вызывать close(0)
?
strace может дать Вам изображение того, что Ваш исполняемый файл делает с дескрипторами файлов:
strace -f -e trace=file,desc,ipc -o /tmp/strace.txt /path/to/exe arg1 arg2...