【问题背景】
拿到一个别人给的某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
结果是
2
也就是说,到第一行就结束了,这里很可能是由于函数中的return造成的,所以有俩种方法来尝试修改:
第一种就是在函数中改造return
第二种就是不用函数形式
终极目的都是去掉return
方法一改造为:
<?php function foo($x){ echo $x+1; echo "\n"; } foo($argn); ?>
直接使用命令行调用
cat a | php -F php_test.php
结果是
2
结果还是只执行的第一行,怀疑是function的系统级返回导致的,继续方法二尝试:
方法二改造为:
<?php echo $argn+1; echo "\n"; ?>
直接使用命令行调用
cat a | php -F php_test.php
结果是
2 3 4 5 6 7 8
成功!
不过为什么会是这样还不明白。