我正在使用 Perl 脚本来解析和创建用于 PHP 的 JSON 输出。
基本上我正在使用 Perl 解析大型文本文件(5-20MB),数据如下:
XXXXXXYYYYYYYYYYYYYZZZZZZZZZYYYYYYYYYPPPPPPPPPPP
XXXXXXYYYYYYYYYYYYYZZZZZZZZZYYYYYYYYYPPPPPPPPPPP
XXXXXXYYYYYYYYYYYYYZZZZZZZZZYYYYYYYYYPPPPPPPPPPP
XXXXXXYYYYYYYYYYYYYZZZZZZZZZYYYYYYYYYPPPPPPPPPPP
该脚本打印文件中每一行数据的 JSON 输出:
{ "1" : "XXXXXXYYYYYYYYYYYYYZZZZZZZZZYYYYYYYYYPPPPPPPPPPP", "2": ... }
从终端运行时,它会在 1.5 秒内完成超过 100,000 行此类文件,成功创建 JSON。
但是当我使用 PHP 从 PHP 中运行脚本时
exec("/usr/bin/perl script.pl input_file.txt",$output);
print_r(json_decode($output[0],true);
它崩溃了。不过,如果我给它一个 2000-3000 行的文件,它会很好用。不使用 json_decode 并且只执行 $output 变量的 var_dump 也可以。
我认为它与 json_decode 有关。
还有其他方法可以做到这一点吗?建议?解决方案?
ps 我已将 PHP memory_limit 增加到 128MB。
谢谢你。
编辑:
Perl 脚本:
#!/usr/bin/perl -w
use strict;
use warnings;
my $file = $ARGV[0];
my $id = 0;
open my $info, $file or die "Could not open $file: $!";
print "{";
while( my $line = <$info>) {
print "\"$id\" : " . "\"" . trim($line) . "\"";
print ',' unless eof;
$id++;
}
print "}";
sub trim {
(my $s = $_[0]) =~ s/^\s+|\s+$//g;
return $s;
}
close $info;