2010-12-07 63 views
0

我目前正在编写一个简单的PHP脚本,以便它可以读取日志文件并将数据放入MySQL数据库。在此期间,它还向网站发出Web请求,以向我提供一些数据,这些数据也将被插入到MySQL数据库中。我预计它会插入500条记录,然后将我重定向到我的主页,但是,它总是以服务器错误结束,当我检查数据库时,它只能输入大约65-70条记录。我已经检查过,并且日志文件没有问题,因为脚本的记录数量较少,例如请帮忙。(PHP + MySQL)总是给第65条记录服务器错误

<?php 
//Make a connection 
$connection = mysql_connect("localhost:3306", "root", "XXXXXXXX"); 

//Select a table 
$db_select = mysql_select_db("major_project", $connection); 

//open file 
$report = fopen('C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\HN.F\report.txt', 'r') or exit("Unable to open report.txt"); 

//insert operation 
while(!feof($report)) 
{ 
    $array = explode("\t", fgets($report)); 

    list($seg, $ts, $rule, $sev, $ref, $ref2, $source, $sourcep, $dest, $destp, $ser) = $array; 

    if($seg != 'Segment') 
    { 
     if(count($array) == 12) 
     { 
      list($seg, $ts, $rule, $sev, $ref, $ref2, $source, $sourcep, $dest, $destp, $ser) = $array; 
      $ipaddrloc = fopen('http://freegeoip.appspot.com/json/'.$source, 'r'); 
      while(!feof($ipaddrloc)) 
      { 
       $var = fgets($ipaddrloc); 
       $lat = json_decode($var)->latitude; 
       $long = json_decode($var)->longitude; 
       $country = json_decode($var)->countryname; 
       $city = json_decode($var)->city; 
      } 
      mysql_query("INSERT INTO `major_project`.`logs` (`LOG_NUMBER`, `Segment`, `Timestamp`, `Rule`, `Severity`, `Reference&nbsp;system`, `Reference`, `Source`, `Source port`, `Dest.`, `Dest. port`, `Service`, `Country`, `City`, `Latitude`, `Longitude`) VALUES (null, '$seg', '$ts', '$rule', '$sev', '$ref', '$ref2', '$source', '$sourcep', '$dest', '$destp', '$ser', '$country', '$city', '$lat', '$long')"); 
     } 
     else 
     { 
      list($seg, $ts, $rule, $sev, $ref, $ref2, $source, $sourcep, $flag, $dest, $destp, $ser) = $array; 
      $ipaddrloc = fopen('http://freegeoip.appspot.com/json/'.$source, 'r'); 
      while(!feof($ipaddrloc)) 
      { 
       $var = fgets($ipaddrloc); 
       $lat = json_decode($var)->latitude; 
       $long = json_decode($var)->longitude; 
       $country = json_decode($var)->countryname; 
       $city = json_decode($var)->city; 
      } 
      mysql_query("INSERT INTO `major_project`.`logs` (`LOG_NUMBER`, `Segment`, `Timestamp`, `Rule`, `Severity`, `Reference&nbsp;system`, `Reference`, `Source`, `Source port`, `Flag`, `Dest.`, `Dest. port`, `Service`, `Country`, `City`, `Latitude`, `Longitude`) VALUES (null, '$seg', '$ts', '$rule', '$sev', '$ref', '$ref2', '$source', '$sourcep', '$flag', '$dest', '$destp', '$ser', '$country', '$city', '$lat', '$long')"); 
     } 
    } 
} 
header("Location: startpage.html"); 

?>

+0

将错误粘贴错误比您的代码更有用 – 2010-12-07 11:48:42

+0

如果您获得一个500,有一个`error.log`可以告诉你更多的地方。你有访问权限吗? – 2010-12-07 11:51:39

回答

0

根据有关GeoIP的部分限制,它们可能会限制交易的数量,您可以提交,你多少可以提交一个特定的时间内,等等。或者你可以只在自己的服务器上达到最大执行时间。

我想你可以检查使用phpinfo()自己的服务器的限制,而且,如果需要的话(和你的服务器管理员允许的),你可以调整它使用set_time_limit()PHP Manual每个脚本的基础。

如果处理的行数在波动,您也可以通过跟踪处理行所花费的时间找到一些帮助。为行添加一个计数器(只是一个简单的整数,在处理每行时递增)并使用类似this technique的东西来回显脚本在每行开始时运行的时间,这可能会让您更好地了解脚本的何时失败,运行多长时间,每行延迟是否导致批次中的行数较少等。