0
我已经有了这个脚本已经有两年多了,直到两周前从来没有任何问题,我不知道为什么它突然停止完成。PERL:脚本没有完成
服务器每天下载并解包一个大的xml文件(平均所有形式的109,000条记录全部如下例所示),然后脚本将其从xml文件传输到mysql数据库以进行存储和查询。
<ACCOUNT>
<NAME>Name</NAME>
<TYPE>Pretitle</TYPE>
<FULLNAME>Fullname</FULLNAME>
<MOTTO>Motto</MOTTO>
<CATEGORY>Account Category</CATEGORY>
</ACCOUNT>
正如我所说的,我已经与它没有任何问题了两年多,但在过去两个星期就68000后停止(平均或多或少)记录已被转让,我真的很喜欢知道为什么。这是一个直接传输,我已经确认xml文件中有超过68,000条记录。
下面是有问题的脚本。如果任何人都可以验证这是一个坚实的脚本还是它有问题,我非常感谢它。我完全丧失了。
#!/usr/bin/perl
print "Content-type: text/html; charset=iso-8859-1\n\n";
use strict;
use DBI;
use XML::Parser;
my %row = ("NAME" => undef, "TYPE" => undef, "FULLNAME" => undef, "MOTTO" => undef, "CATEGORY" => undef);
my $dbh = DBI->connect ("DBI:mysql:database:localhost", "username", "password",
{ RaiseError => 1, PrintError => 0});
my $parser = new XML::Parser (
Handlers => {
Start => \&handle_start,
End => \&handle_end,
Char => \&handle_text
}
);
$parser->parsefile ("accounts.xml");
$dbh->disconnect();
sub handle_start
{
my ($p, $tag) = @_;
if ($tag eq "ACCOUNT")
{
foreach my $key (keys (%row))
{
$row{$key} = undef;
}
}
}
sub handle_text
{
my ($p, $data) = @_;
my $tag = $p->current_element();
$row{$tag} .= $data if exists ($row{$tag});
}
sub handle_end
{
my ($p, $tag) = @_;
if ($tag eq "ACCOUNT")
{
my $str;
foreach my $key (keys (%row))
{
$str .= "," if $str;
$str .= "$key=" . $dbh->quote($row{$key});
}
$dbh->do ("INSERT INTO TABLE SET $str");
}
}
错误信息?退出代码? – ikegami
为什么输出一个HTTP头? – friedo
我没有得到任何指标,除记录没有加起来以外,任何事情都是错误的。在浏览器中运行它只是出现一个500错误,您希望在浏览器中运行脚本需要20分钟才能完成该错误。偶尔我会手动运行脚本,尽管不是那么频繁。 HTTP头在代码中已经使用了好几年了,而且我的理解是,为了从浏览器运行脚本,需要使用它。它没有任何问题。 –