如何在Windows中将程序管道导入PHP(-r)?

时间:2018-02-25 19:07:02

标签: php shell

在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。

2 个答案:

答案 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(除了押韵)。