2010-12-07 6 views
0

私は現在、ログファイルを読み込んでデータをMySQLデータベースに入れるための簡単なPHPスクリプトを作成しています。その間、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

エラーをコードよりも貼り付けると便利です –

+0

500には、どこかに 'error.log'があります。あなたはそれにアクセスできますか? –

+0

しかし、私はあなたが単にAppspotの終わりにいくつかのリクエスト制限を打つことを確信しています。そのリクエストを削除すると機能しますか? –

答えて

0

は、のGeoIPの一部の制限によって、彼らはなど、あなたが特定の期間内に提出することができますどのように多く、提出することができるトランザクションの数を制限することができるまたはあなたは可能性があり自分のサーバーで最大の実行時間に達する可能性があります。

私はあなたがphpinfo()を使用して独自のサーバーの制限を確認することができると思う、および、必要に応じて(と、サーバーの管理者によって許可された)、あなたはset_time_limit()PHP Manualを使用してあたりのスクリプトベースでそれを調整することができます。

処理される行の数が変動している場合は、行を処理する時間を追跡することによっていくつかのヘルプを見つけることもできます。行のカウンタ(処理する各行をインクリメントする単純な整数)を追加し、this techniqueのようなものを使用して、スクリプトが実行されている時間をエコーし​​て各行を開始するときに、スクリプト行ごとの遅延が長くなり、バッチ内で処理される行の数が少なくなるかどうかを確認することができます。

+0

私はそれを試してみましょう – mib1413456

+0

それは働いた!だからスクリプト上の時間制限は、非常にありがとう:D – mib1413456

+0

優れています。私はあなたにこの問題の横にあるチェックマークをクリックして正しいとマークするように頼むことができますか?それはあなたが質問を終わらせる方法です、そしてあなたのためにそれらに答える人々に少しの報酬を与えます。乾杯。 –

関連する問題