在Windows 7中,从C:\wamp64\bin\php\php5.6.25\php.exe
运行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曾经运行过一些作为参数传递的代码,我在询问它是运行文件还是接受stdin。
答案 0 :(得分:1)
这里有一些混乱点,所以我会尽力逐条列出错误。
首先,原始命令无法在Linux / POSIX shell上运行,因为它无效:
echo 4; | php -r
;
具有重要意义,它是一个命令分隔符,命令不能以|
开头。
解决这个问题,你得到:
echo '4;' | php -r
就shell而言,它至少是有效的,但它仍然不足以让PHP处理。 -r
参数需要第二个术语code
,这是要评估的代码。这需要在线提供,而不是像往常那样在外部提供。
具体来说,-r
标志并不意味着“运行输入文件就像它有<?php ... ?>
一样”,而是意味着“在PHP模式下运行这段代码”。
例如:
echo '4;' | php
技术上有效,但它没有被评估为PHP代码,所以它毫无意义。
在POSIX shell中运行的版本是:
php -r `echo '4;'`
将echo '4;'
的输出内联到命令行参数本身。如果没有PowerShell参与,我不确定Windows是否可以做到这一点。
-r
标志适用于快速的小片段,如:
php -r 'echo 5 * 9;'
按预期打印45
。
答案 1 :(得分:0)
尝试
echo 4 | php -r
而不是终止echo 4并且没有任何东西进入php。
不是它应该重要,“ - r”对PHP没有任何意义。也不是4(除了押韵)。