PHP标准输入从bash管道和下面的文档


php stdin from bash pipe and heredoc

我可以同时接收来自管道和heredoc的输入,并在php命令行中同时使用它们吗?

我想这样做:

bash$ ls -l | php <<'code'
<?php
   echo $piped;
?>
code

返回ls -l

的结果

另外,我可以使用php -R与heredoc输入php脚本吗?

管道

ls -l | php -r 'print_r(file("php://stdin"));'


Heredoc

$ php <<CODE
<?php
echo "Hello World'n";
?>
CODE
Hello World

结合

$ ls -l | php <<'CODE'
<?php
$f = file("php://stdin");
foreach($f as $k=>$v){
echo "[$k]=>$v";
}
?>
Program Finished
CODE
[0]=><?php
[1]=>$f = file("php://stdin");
[2]=>foreach($f as $k=>$v){
[3]=>echo "[$k]=>$v";
[4]=>}
[5]=>?>
[6]=>Program Finished
Program Finished

注意:当您使用Here Documents for php命令时,新添加的php代码将覆盖以前的stdin

关于-R部分的问题:

-R/--process-code

每个输入行执行的PHP代码。新增于PHP 5.

该模式有两个特殊变量:$argn$argi$argn将包含PHP正在处理的行,而$argi将包含行号。<一口>文档

如果我对你的问题理解正确,你正在寻找$argn变量。你的bash应该支持这个文件。

编辑:错误,只需调用多行值:

$ ls -l | php -R '
printf("#%02d: %s'n", $argi, $argn);
'

(我认为使用单引号开关更容易)