我可以从管道和heredoc接收输入,并在命令行的php中使用它们。
我想做这样的事情:
bash$ ls -l | php <<'code'
<?php
echo $piped;
?>
code
哪个应返回ls -l
另外,我可以将php -R
用于php脚本的heredoc输入吗?
答案 0 :(得分:12)
<强>管道强>
ls -l | php -r 'print_r(file("php://stdin"));'
<强>定界符强>
$ 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
注意:对php
命令使用 Here Documents 时,新添加的php
代码会覆盖之前的stdin
答案 1 :(得分:2)
关于问题的-R
部分:
-R
/--process-code
为每个输入行执行的PHP代码。在PHP 5中添加。
此模式中有两个特殊变量:
$argn
和$argi
。$argn
将包含PHP当时正在处理的行,而$argi
将包含行号。 Docs
如果我理解你的问题,你正在寻找$argn
变量。 Heredoc应该是你的bash支持。
编辑:错误,只需使用多行调用值
$ ls -l | php -R '
printf("#%02d: %s\n", $argi, $argn);
'
(我认为使用交换机的单引号更容易)