PHP 命令行之F (processfile) 对每个输入行都执行 PHP 文件 (PHP 5 新加)

【问题背景】

拿到一个别人给的某PHP函数想使用,该函数输入是一个字符串,我想的输入是存在一个文件里,每一行都当作一个字符串输入,分别调用该函数。


【一般思路】

PHP包装该函数,用PHP读写文件的方式来做多行输入。


【php命令行之-F (--process-file) 】

PHP手册(来自http://php.net/manual/zh/features.commandline.php 或则可以到http://code.google.com/p/phpdoc-zh/ 下载)

在chm中搜索“PHP 的命令行模式”会有很多解释,就是很多没有例子,网上也没找到。

对于一行解释突然眼镜一亮羡慕

-F --process-file

对每个输入行都执行 PHP 文件。PHP 5 新加。 

对简短的无例子的解释不理解抓狂


于是就操家伙乱试试

输入文件 a

内容:

1
2
3
4
5
6

PHP函数文件( php_test.php )内容:

<?php
    function foo($x){
        return $x+1;
    }
    echo foo($argn)."\n";
?>

(注释:在这种命令行模式下有两个特殊变量:$argn 和 $argi$argn 就是当前处理的这一行的内容,而 $argi 则是当前处理这一行的行号。 )

直接使用命令行调用

cat a | php -F php_test.php 

结果是

也就是说,到第一行就结束了,这里很可能是由于函数中的return造成的,所以有俩种方法来尝试修改:

第一种就是在函数中改造return

第二种就是不用函数形式

终极目的都是去掉return


方法一改造为:

<?php
    function foo($x){
        echo  $x+1;
        echo  "\n";
    }
    foo($argn);
?>

直接使用命令行调用

cat a | php -F php_test.php 

结果是

结果还是只执行的第一行,怀疑是function的系统级返回导致的,继续方法二尝试:


方法二改造为:

<?php
    echo $argn+1;
    echo "\n";
?>

直接使用命令行调用

cat a | php -F php_test.php 

结果是

2
3
4
5
6
7
8
成功!

不过为什么会是这样还不明白。


原文地址:https://www.cnblogs.com/aquastar/p/2776207.html