PHP実装:ファイルフロー処理を圧縮し、解凍する

3340 ワード

需要:アップルが支払った注文記録を処理し、ローカルデータベースと照合します.
アップルの請求書を要求して、圧縮ファイルを返して、解凍してからxlsファイルになります.
構想:要求されたファイルストリームをzipファイルに配置し、このファイルを解凍した後、ファイル内容を配列処理に変換します.
実装コード(例を以下に示し、データ処理も添付する):
アップルの請求書apiアドレス:https://developer.apple.com/documentation/appstoreconnectapiここで注意すべき点は、要求されたデータが属するタイムゾーン:太平洋標準時間(PST)を採用することを報告することです.1日は12:00 AMから11:59 PM(PST)までの間で発生した取引を含む.だから北京時間にお願いして、昨日のデータは取れないかもしれません.
$dir=dirname(__FILE__);
$url = "http://1.1.1.1/onlinepay/iap/salesreport/download?refersource=ttt&frequency=DAILY&reportDate=2019-08-01&reportSubType=SUMMARY&reportType=SALES&version=1_0";
//               (        )
//$report_date = date("Y-m-d",strtotime("-2 days"));
$post_arr = "...    "
$result = req_post($url,$post_arr);
$res = make_bill_file($dir,$result);

if($res){
	//    
	$arr = array("SKU","Title","Product Type Identifier","Developer Proceeds","End Date","Customer Price");
	$data = get_apple_bill_data($dir,$arr);
	//$data        
	if(empty($data)){ return false;}
	//     Product Type Identifier = IA9
	$data_a = array();
	foreach($data as $k => $v) {
	    	if($v['Product Type Identifier'] == 'IA9'){
	    		$data_a[] = $v;
	    	}else{
	    		continue;
	    	}
	    }
	unset($data);
	unlink($dir."/apple_bill");
	unlink($dir."/apple_bill.gz");
}	
//    
function get_apple_bill_data($dir,$arr){
	$path = $dir."/apple_bill";
	$file = fopen($path, 'r');
	//     (   )
	$row = fgets($file);
	$row = explode("\t", $row);
	$title = array();
	foreach($row as $k => $v) {
	    $title[$k] = str_replace("
", '', $v); } // $data = array(); $count = 0; while(!feof($file)) { $row = fgets($file); $row = explode("\t", $row); if(!$row[0]) continue;// foreach($title as $k => $v) { if(in_array($v, $arr)){ $data[$count][$v] = str_replace("
", '', $row[$k]); }else{ continue; } } $count ++; } fclose($file); return $data; } // , $dir: $result function make_bill_file($dir,$result){ $myfile = fopen($dir."/apple_bill.gz", "wb") or die("Unable to open file!"); fwrite($myfile, $result); $buffer_size = 4096; // read 4kb at a time $file = gzopen($dir."/apple_bill.gz", 'rb'); $out_file = fopen($dir."/apple_bill", 'wb'); $str=''; while(!gzeof($file)) { fwrite($out_file, gzread($file, $buffer_size)); } $res_close = fclose($out_file); $res_gzclose = gzclose($file); if($res_close && $res_gzclose){ return true; }else{ return false; } } function req_post($url, $post_data = '', $timeout = 10){ $ch = curl_init(); curl_setopt ($ch, CURLOPT_URL, $url); curl_setopt ($ch, CURLOPT_POST, 1); if($post_data != ''){ curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); } curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout); curl_setopt($ch, CURLOPT_HEADER, false); $file_contents = curl_exec($ch); curl_close($ch); return $file_contents; }