2 ~ 3 回のデータベース クエリ、2 回の挿入、1 回の更新を行うスクリプトがあります。私が抱えている問題は、のような Web サーバー ページに移動してスクリプトを手動でテストするとwww.domain.com/handler.php?a=1&b=2&c=3
、3 つの更新が完全に取得されることです。しかし、この関数を使用すると機能しません...具体的には、INSERT INTO が機能しません。データベースの更新は問題なく取得できますが、新しいエントリは作成されません。
while (($data = fgetcsv(STDIN)) !== false){
$url='http://domain.com';
$date = date('Y-m-d');
$type = trim($data[0]);
if ($type != ''){
$send_date = $data[2];
$email = $data[4];
$status = $data[7];
$error = $data[8];
$bounce = $data[10];
$ip = $data[14];
$job_id = $data[19];
$params = 'pmta_token='.$pmta_token.'&type='.$type.'&send_date='.$send_date.'&email='.$email.'&status='.$status.'&error='.$error.'&bounce='.$bounce.'&ip='.$ip.'&job_id='.$job_id;
$params= array('server'=>$_SERVER['SERVER_NAME'],'type'=>$data[0],'time'=>$data[1],'message'=>$data[8],'bouncecat'=>$data[10],'jobid'=>$data[19],'domip'=>$data[21]);
$line = $type.','.$email.','.$ip.','.$status.','.$error.','.$bounce.','.$job_id.','.date('c')."\n";
curl_post_async($url, $params);
}
}
function curl_post_async($url, $params){
foreach($params as $key => $val){
if (is_array($val)) $val = implode(',', $val);
$post_params[] = $key.'='.urlencode($val);
}
$post_string = implode('&', $post_params);
$parts=parse_url($url);
$fp = fsockopen($parts['host'],
isset($parts['port'])?$parts['port']:80,
$errno, $errstr, 30);
$out = "POST ".$parts['path']." HTTP/1.1\r\n";
$out.= "Host: ".$parts['host']."\r\n";
$out.= "Content-Type: application/x-www-form-urlencoded\r\n";
$out.= "Content-Length: ".strlen($post_string)."\r\n";
$out.= "Connection: Close\r\n\r\n";
if (isset($post_string)) $out.= $post_string;
fwrite($fp, $out);
fclose($fp);
}
私は何かが欠けているに違いない!curl の代わりにこの関数を使用している理由は、curl が接続して応答を待機するのに時間がかかるためです... このスクリプトは 1 分間に約 2,000 のリクエストを処理しています。
ここにhandler.phpがあります
これは失敗していてDBに何も入力していないもので、手動で行ってもエラーはありません。魅力的に機能しますが、ソケットの使用はINSERTでのみ失敗し、UPDATEはソケット接続を介して機能します.?. ?.?
mysql_connect('localhost','root','');
mysql_select_db('analyzer');
date_default_timezone_set('America/Los_Angeles');
if(isset($_POST['type'])){
$domip = @explode('/',$_POST['domip']);
$server = @strtolower($_POST['server']);
$type = @$_POST['type'];
$time = @$_POST['time'];
$message = @$_POST['message'];
$bouncecat = @$_POST['bouncecat'];
$jobid = @$_POST['jobid'];
$domain = @$domip[0];
$md5 = @$_POST['md5'];
$ip = @$domip[1];
if(isset($_POST['ip'])){$ip=$_POST['ip'];}
}else{
$domip = @explode('/',$_REQUEST['domip']);
$server = @strtolower($_REQUEST['server']);
$type = @$_REQUEST['type'];
$time = @$_REQUEST['time'];
$message = @$_REQUEST['message'];
$bouncecat = @$_REQUEST['bouncecat'];
$jobid = @$_REQUEST['jobid'];
$domain = @$domip[0];
$md5 = @$_REQUEST['md5'];
$ip = @$domip[1];
}
$now=date('Y-m-d H:i');
@mysql_query("INSERT INTO `log` (`type`,`time`,`message`,`cat`,`jobid`,`domain`,`ip`,`server`) VALUES('$type','$time','$message','$bouncecat','$jobid','$domain','$ip','$server')");
if(strpos($message,'ALERT'!==false)){
@mysql_query("INSERT INTO `alerts` (`type`,`time`,`message`,`level`,`value`,`page`) VALUES('error','$now','$message','5','$ip','apps/loganalyzer/incl/datatracker.php')");
}
if($type=='d'){
@mysql_query("UPDATE `$server` SET `delivered`=`delivered`+1 WHERE `time`='$now'");
}elseif(($type=='b')&&($bouncecat!='bad')){
@mysql_query("UPDATE `$server` SET `errored`=`errored`+1 WHERE `time`='$now'");
}elseif(($type=='b')&&($bouncecat=='bad')){
@mysql_query("UPDATE `$server` SET `bounced`=`bounced`+1 WHERE `time`='$now'");
}elseif($type=='c'){
@mysql_query("UPDATE `$server` SET `unsubscribed`=`unsubscribed`+1 WHERE `time`='$now'");
}