zoukankan      html  css  js  c++  java
  • 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
    成功!

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


  • 相关阅读:
    P3704 [SDOI2017]数字表格
    CF 700 E. Cool Slogans
    杜教筛学习笔记
    [BOI2004]Sequence 数字序列(左偏树)
    [WC2007]剪刀石头布(最大流)
    [NOI2009]变换序列(二分图匹配)
    文理分科(最小割)
    上帝与集合的正确用法(欧拉定理)
    [HAOI2008]圆上的整点(数论)
    主席树学习笔记
  • 原文地址:https://www.cnblogs.com/aquastar/p/2776207.html
Copyright © 2011-2022 走看看