You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows下如何将程序输出管道传递给PHP (-r)命令?

嘿,这个问题我之前在Windows上折腾PHP的时候也踩过坑!主要是Windows的命令提示符(cmd)和Linux的shell在管道处理、参数解析上的逻辑差异搞的鬼,咱们一步步来解决:

一、直接通过管道执行代码的正确姿势

在Windows下,你不能像Linux那样直接把管道内容传给php -r(因为cmd不会自动把管道内容当作-r的参数),得让PHP主动读取标准输入的内容并执行。用php://stdin这个内置流就能实现:

echo 4; | php -r "eval(file_get_contents('php://stdin'));"

执行后就能正常输出4啦!

如果要执行带引号的代码,比如echo 'Hello PHP';,注意cmd里的引号规则——用双引号包裹整个PHP代码,内部的单引号直接用就行:

echo 'Hello PHP'; | php -r "eval(file_get_contents('php://stdin'));"

要是用PowerShell的话,引号处理更灵活,写法类似:

echo 'echo "Hi from PowerShell + PHP";' | php -r "eval(file_get_contents('php://stdin'));"

二、读取文件中代码的方法

如果你的PHP代码存在文件里(比如test.php),最直接的方式就是:

php test.php

要是非得用-r参数的方式读取文件执行,也可以这么写:

php -r "eval(file_get_contents('test.php'));"

另外PHP还支持直接从标准输入读取文件内容运行,更简洁:

php < test.php

为什么原来的写法在Windows下不行?

Linux的shell(比如bash)会通过管道把前面命令的输出当作后续命令的参数(比如配合$(cat)这类语法),但Windows的cmd没有这个自动传递的逻辑。当你执行echo 4;|php -r时,php -r后面没有接具体的代码参数,PHP就会默认打印使用说明,这就是你看到的现象。

内容的提问来源于stack exchange,提问作者barlop

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:03:51