【发布时间】:2013-05-18 18:59:19
【问题描述】:
我正在使用 Perl 脚本来解析和创建 JSON 输出以供 PHP 使用。
基本上我正在使用 Perl 解析大型文本文件(5-20MB),数据如下:
XXXXXXYYYYYYYYYYYYYZZZZZZZZZYYYYYYYYYPPPPPPPPPPP
XXXXXXYYYYYYYYYYYYYZZZZZZZZZYYYYYYYYYPPPPPPPPPPP
XXXXXXYYYYYYYYYYYYYZZZZZZZZZYYYYYYYYYPPPPPPPPPPP
XXXXXXYYYYYYYYYYYYYZZZZZZZZZYYYYYYYYYPPPPPPPPPPP
脚本打印文件中每一行数据的 JSON 输出:
{ "1" : "XXXXXXYYYYYYYYYYYYYZZZZZZZZZYYYYYYYYYPPPPPPPPPPP", "2": ... }
从终端运行时,它在 1.5 秒内遍历超过 100,000 行此类文件,成功创建 JSON。
但是当我在 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 有关。
还有其他方法可以做到这一点吗?建议?解决方案?
附言我已将 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;
【问题讨论】:
-
您在 PHP 中遇到了什么样的错误?
-
当我从控制台运行它时,不显示任何内容。当我从浏览器运行它并执行 print_r(json_decode($output[0],true)); - 显示“服务器错误”HTTP 500。
-
你的错误日志呢?
-
将 Feed 分成几部分。不看剧本就不能说太多。
-
perl中的json也可以在PHP中解析,为什么还要解析呢