Perl スクリプトを使用して、PHP で使用する JSON 出力を解析および作成しています。
基本的に、次のようなデータを使用して、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に関係していると思います。
これを行う他の方法はありますか?提案?ソリューション?
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;