В Windows 7 запуск php.exe из C:\wamp64\bin\php\php5.6.25\php.exe
,
Я считаю, что следующее печатает инструкции по использованию PHP.
echo 4;|php -r
<- печатает инструкцию по использованию php
C:\wamp64\bin\php\php5.6.25>echo 4;|php -r
Usage: php [options] [-f] <file> [--] [args...]
php [options] -r <code> [--] [args...]
Однако друг утверждает, что та же команда echo 4;|php -r
(или, возможно, он имеет в виду echo '4;'|php -r
работает на него, используя Linux.
Как я могу получить это поведение в Windows?
Заметка Я знаю, что php -r используется для запуска некоторого кода, переданного в качестве параметра, следующего за ним, я спрашиваю, запускает ли он файл или принимает стандартный ввод.
Здесь есть несколько моментов путаницы, поэтому я сделаю все возможное, чтобы перечислить, что не так.
Во-первых, оригинальная команда не может работать в оболочке Linux / POSIX, потому что она недопустима:
echo 4; | php -r
куда ;
имеет важное значение, это разделитель команд, и команда не может начинаться с |
,
Исправив это, вы получите:
echo '4;' | php -r
Где это, по крайней мере, верно в отношении оболочки, но для PHP все еще недостаточно. -r
аргумент требует второго термина, code
, который является кодом для оценки. Это должно быть сделано в линию, а не снаружи, как вы это обычно делаете.
В частности, -r
флаг не означает «запустить входной файл, как если бы он имел <?php ... ?>
окружить его «но вместо этого это означает» запустить этот бит кода в режиме PHP «.
Например:
echo '4;' | php
Технически работает, но это не оценивается как PHP-код, поэтому это бессмысленно.
Версия, которая работает в оболочке POSIX:
php -r `echo '4;'`
Где это указывает на вывод echo '4;'
в сам аргумент командной строки. Я не уверен, что Windows может сделать это без участия PowerShell.
-r
Флаг предназначен для быстрых маленьких фрагментов, таких как:
php -r 'echo 5 * 9;'
Где это печатает 45
как и ожидалось.
Пытаться
echo 4 | php -r
вместо того, чтобы завершать echo 4 и ничего не добавляя в php.
Не то чтобы это имело значение, «-r» ничего не значит для php. Также не 4 (кроме рифмования).