У меня есть код для получения данных о посещаемости отпечатков пальцев.
Это мой код:
public function upload_data_absen(){
error_reporting(1);
$IP = $this->get_setting()->ip;
$Key = '0';
$today = date('Y-m-d');
$all_data_absen = $this->db->get('data_absen')->num_rows();
if($IP!=""){
$Connect = fsockopen($IP, "80", $errno, $errstr, 1);
if($Connect){
$soap_request="
<GetAttLog>
<ArgComKey xsi:type=\"xsd:integer\">".$Key."</ArgComKey>
<Arg><PIN xsi:type=\"xsd:integer\">All</PIN></Arg>
</GetAttLog>";
$newLine="\r\n";
fputs($Connect, "POST /iWsService HTTP/1.0".$newLine);
fputs($Connect, "Content-Type: text/xml".$newLine);
fputs($Connect, "Content-Length: ".strlen($soap_request).$newLine.$newLine);
fputs($Connect, $soap_request.$newLine);
$buffer="";
while($Response=fgets($Connect, 1024)){
$buffer=$buffer.$Response;
}
$buffer = Parse_Data($buffer,"<GetAttLogResponse>","</GetAttLogResponse>");
$buffer = explode("\r\n",$buffer);
$count_buffer = count($buffer);
if($all_data_absen<$count_buffer){
for($a=0;$a<count($buffer);$a++){
$data = Parse_Data($buffer[$a],"<Row>","</Row>");
$PIN = Parse_Data($data,"<PIN>","</PIN>");
$DateTime = Parse_Data($data,"<DateTime>","</DateTime>");
$Verified = Parse_Data($data,"<Verified>","</Verified>");
$Status = Parse_Data($data,"<Status>","</Status>");
$date = date('Y-m-d',strtotime($DateTime));
if($date==$today){
$ins = array(
"pin" => $PIN,
"date_time" => $DateTime,
"ver" => $Verified,
"status" => $Status
);
if (!$this->if_exist_check($PIN, $DateTime) && $PIN && $DateTime) {
$this->db->insert('data_absen', $ins);
}
}
}
return 'data Absen masuk: '.$count_buffer;
}else{
return false;
}
}else{
return false;
}
}
}
}
Приведенный выше код получить все данные, потому что в коде $ soap_request я получаю весь PIN-код и фильтрую все данные после того, как помещаю в массив и получаю данные по дате, но это очень медленно, потому что я получаю все данные с машины.
Могу ли я изменить soap просит просто получить машинные данные по дате, а не по ПИН-коду?
Спасибо.