PHP exec vs在linux终端执行相同的命令

时间:2014-02-13 01:39:22

标签: php linux csv sed exec

我有一个非常大的文件,5GB的csv文件,我想使用PHP exec方法显示给用户。

我尝试使用linux命令读取某些行号(第21行到第30行)而不是所有行:

mycprogram largefile.csv | sed -n "21,30p;30q"

终端将在输入命令后立即返回确切的行数。但是,当我在php exec中使用类似的命令时,它将等待第一部分(mycprogram largefile.csv)完全加载到内存中(这需要很长时间)才能进入sed以获取该行我想要的号码。 php代码类似于:

$cmd = "mycprogram largefile.csv | sed -n '21,30p;30q'";
exec($cmd, $output);

任何想法,我都可以通过使用PHP方法从终端获得我的输出,而无需等待mycprogram完全加载?

由于 如何

2 个答案:

答案 0 :(得分:0)

命令mycprogram是否在largefile.csv上逐行转换?如果是这种情况,请转到

$cmd = "sed -n '21,30p;30q' largefile.csv  > temp; mycprogram temp" ;

答案 1 :(得分:0)

在sed上使用-u--unbuffered选项作为流流处理,默认情况下,逐行加载所有文件,强制完整加载/处理整个先前的输入。

相关问题