0

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;
4

3 に答える 3

1

If it's running from console the error lies in your php-config. This could be all sort of configuration error from script-execution-timeout to memory issues or script execution rights. In your case I'd vouch for some timeout occuring or script execution rights, depending on how long it takes to crash. Check your php-error-log for details ...

于 2013-05-23T12:12:02.200 に答える