bash — PHP (cli) проглатывает байт при чтении из / dev / tty

У меня проблема с PHP (cli) при использовании /dev/tty как файл. Фактический сценарий немного более сложен и не упоминается здесь, чтобы не усложнять вопрос.

Чтобы запустить код PHP из STDIN, я могу выполнить команду следующим образом:

$ php
<?php
echo "hello world\n";
?>
<CTRL-D>
hello world
$

Тем не менее, когда пробегать /dev/ttyпроисходит следующее,

$ php /dev/tty
<?php
echo "hello world\n";
?>
<CTRL-D>
?php
echo "hello world\n";
?>
$

НОТА: Первый персонаж < просто теряется и php обрабатывает ввод как обычный текст. Мы можем упростить тест до следующего,

За работой

$ php
abcd
abcd
$

Не работает

$ php /dev/tty
abcd
bcd
$

Я бегал strace чтобы проверить, правильно ли php читает ввод, и похоже, что это так, как показано ниже,

$ strace -o /tmp/1 php /dev/tty ; grep "bcd" /tmp/1
abcd
<CTRL-D>
bcd
read(4, "abcd\n", 4096)                 = 5
write(1, "bcd\n", 4)                    = 4
$

Это кажется довольно простым, и я чувствую, что мне здесь чего-то не хватает.

Кто-нибудь знает, почему PHP (cli) ведет себя так при чтении из / dev / tty?

Дополнительная информация:-

  • Версии PHP: 5.3.3 (cli) и 5.5.20 (cli)
  • ОС: Linux (CentOS 6.4 и Fedora 19)

3

Решение

php /dev/tty
\<?php
echo "hi\n";
?>
hi

Спасаясь < работал. Я не знаю почему, хотя: D Вероятно, связано с тем, что это работает в Bash.

-1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]