php exec建议/替代方案

时间:2012-08-02 08:59:14

标签: php exec popen proc-open

有人可以给我一些关于PHP命令执行和最佳实践的指示吗?

我目前正在尝试解析一些netbackup数据,但我遇到的问题与系统调用返回的大量数据有关。为了减少数据量,我正在做这样的事情:

$awk_command = "awk -F, '{print $1\",\"$2\",\"$3\",\"$4\",\"$5\",\"$6\",\"$7\",\"$9\",\"$11\",\"$26\",\"$32\",\"$33\",\"$34\",\"$35\",\"$36\",\"$37\",\"$38\",\"$39\",\"$40}'";
exec("sudo /usr/openv/netbackup/bin/admincmd/bpdbjobs -report -M $master_name -all_columns | $awk_command", $get_backups, $null);
foreach ($get_backups as $backup_detail)
    {
    process_the_data();
    write_data_to_db();
    }

我使用awk来限制接收的数据量。如果没有它,我最终会收到大约150mb的数据,有了它,我可以获得更加可管理的~800k数据。

你不需要告诉我awk狗屎很讨厌 - 我知道已经......但是为了改善自己(以及我的代码),任何人都可以提出替代方案吗?

我在考虑类似proc_open之类的东西,但我真的不确定这是否会带来任何好处。

1 个答案:

答案 0 :(得分:1)

使用exec将数据写入文件,而不是将其全部读入脚本。

exec("sudo /usr/openv/netbackup/bin/admincmd/bpdbjobs -report -M $master_name -all_columns | $awk_command > /tmp/output.data");

然后使用任何内存有效的方法来读取部分文件。

看看这里: Least memory intensive way to read a file in PHP