PHPにおける非ブロッキング応用の分析

12826 ワード

<!-- [if gte mso 9]><xml>
 <w:WordDocument>
  <w:View>Normal</w:View>
  <w:Zoom>0</w:Zoom>
  <w:PunctuationKerning/>
  <w:DrawingGridVerticalSpacing>7.8  </w:DrawingGridVerticalSpacing>
  <w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery>
  <w:DisplayVerticalDrawingGridEvery>2</w:DisplayVerticalDrawingGridEvery>
  <w:ValidateAgainstSchemas/>
  <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
  <w:IgnoreMixedContent>false</w:IgnoreMixedContent>
  <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
  <w:Compatibility>
   <w:SpaceForUL/>
   <w:BalanceSingleByteDoubleByteWidth/>
   <w:DoNotLeaveBackslashAlone/>
   <w:ULTrailSpace/>
   <w:DoNotExpandShiftReturn/>
   <w:AdjustLineHeightInTable/>
   <w:BreakWrappedTables/>
   <w:SnapToGridInCell/>
   <w:WrapTextWithPunct/>
   <w:UseAsianBreakRules/>
   <w:DontGrowAutofit/>
   <w:UseFELayout/>
  </w:Compatibility>
  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
 </w:WordDocument>
</xml><![endif]--><!-- [if gte mso 9]><xml>
 <w:LatentStyles DefLockedState="false" LatentStyleCount="156">
 </w:LatentStyles>
</xml><![endif]--><!-- [if gte mso 10]>
<style><!--mce:0-->



最近の会社のプロジェクトでは、EXECLのデータを一括してデータベースにインポートする機能があります.ローカル同時実行は、言語独自の特性によってプログラム自体でマルチタスク効果を実現することしかできません.一般的に、現在の言語はマルチスレッドまたはマルチプロセスによって実現されます.PHPはマルチスレッドをサポートしていないため、現在はマルチプロセス方式しか採用できず、オペレーティングシステムにローカル同時実行を支援させることができます.


public function httpRequest($params){
		//{"header":{"operation":"api.getScoreData"}, "params":{"cname":"ddddd","cpwd":"ddddd"}}
		$data = array("tb" =>$params); 
		// return json data
		$data_string = json_encode($data); 
		$tmp = $params[0]['savename'];
		$pid = $params['project_id'];
		// request url host http://localhost/webinsights/adminLink.php/Link/test/$tmp/$pid
		//$url = U("Link/test/$tmp","$pid");
		$ch = curl_init("http://localhost/webinsights/adminLink.php/Link/writeDataBase/$tmp/$pid");  
		curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");                                                                       
		curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);                                                                    
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
		curl_setopt($ch, CURLOPT_TIMEOUT, 1); 
		curl_setopt($ch, CURLOPT_HTTPHEADER, array(                                                                            
			'Content-Type: application/json',                                                                                  
			'Content-Length: ' . strlen($data_string))                                                                         
		);    
		curl_exec($ch);
		curl_close($ch);
	}

	public function writeDataBase(){
		//   php      
		//sleep(10);
		$execlname = $_REQUEST['_URL_'][2];
		$project_id = $_REQUEST['_URL_'][3];
		$name = substr($execlname ,0,13 );
		$arr = F($name);
		
		$model = D('ItemsDetail');

		$data = array();
		ignore_user_abort(true); // run script in background
		set_time_limit(0); 
		foreach ( $arr as $k=>$v )
		{
			$data['linkname'] = $v['B'];
			$data['linkurl'] = $v['C'];
			$data['linktext'] = $v['F'];
			$data['loginurl'] = $v['E'];
			$data['pr'] = $v['D'];
			$data['project_id'] = $project_id;
            //info  
			$data['ItemsInfo'] = array(
				"project_id" =>	$project_id,
				"lxname"     =>	$v['A'],
				"lxqq"       =>	$v['K'],
				"lxemail"    =>	$v['M'],
				"lxtel"      =>	$v['L'],
				"fkname"     =>	$v['J'],
				"fkaccount"  =>	$v['I'],
				"fkprice"    =>	$v['H'],
			
			);
			$model->batAdd($data);
			
			sleep(1);
		}
		F($name,NULL);
		exit;
	}
public function httpRequest($params){
		//{"header":{"operation":"api.getScoreData"}, "params":{"cname":"ddddd","cpwd":"ddddd"}}
		$data = array("tb" =>$params); 
		// return json data
		$data_string = json_encode($data); 
		$tmp = $params[0]['savename'];
		$pid = $params['project_id'];
		// request url host http://localhost/webinsights/adminLink.php/Link/test/$tmp/$pid
		//$url = U("Link/test/$tmp","$pid");
		$ch = curl_init("http://localhost/webinsights/adminLink.php/Link/writeDataBase/$tmp/$pid");  
		curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");                                                                       
		curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);                                                                    
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
		curl_setopt($ch, CURLOPT_TIMEOUT, 1); 
		curl_setopt($ch, CURLOPT_HTTPHEADER, array(                                                                            
			'Content-Type: application/json',                                                                                  
			'Content-Length: ' . strlen($data_string))                                                                         
		);    
		curl_exec($ch);
		curl_close($ch);
	}

	public function writeDataBase(){
		//   php      
		//sleep(10);
		$execlname = $_REQUEST['_URL_'][2];
		$project_id = $_REQUEST['_URL_'][3];
		$name = substr($execlname ,0,13 );
		$arr = F($name);
		
		$model = D('ItemsDetail');

		$data = array();
		ignore_user_abort(true); // run script in background
		set_time_limit(0); 
		foreach ( $arr as $k=>$v )
		{
			$data['linkname'] = $v['B'];
			$data['linkurl'] = $v['C'];
			$data['linktext'] = $v['F'];
			$data['loginurl'] = $v['E'];
			$data['pr'] = $v['D'];
			$data['project_id'] = $project_id;
            //info  
			$data['ItemsInfo'] = array(
				"project_id" =>	$project_id,
				"lxname"     =>	$v['A'],
				"lxqq"       =>	$v['K'],
				"lxemail"    =>	$v['M'],
				"lxtel"      =>	$v['L'],
				"fkname"     =>	$v['J'],
				"fkaccount"  =>	$v['I'],
				"fkprice"    =>	$v['H'],
			
			);
			$model->batAdd($data);
			
			sleep(1);
		}
		F($name,NULL);
		exit;
	}

public function httpRequest($params){
		//{"header":{"operation":"api.getScoreData"}, "params":{"cname":"ddddd","cpwd":"ddddd"}}
		$data = array("tb" =>$params); 
		// return json data
		$data_string = json_encode($data); 
		$tmp = $params[0]['savename'];
		$pid = $params['project_id'];
		// request url host http://localhost/webinsights/adminLink.php/Link/test/$tmp/$pid
		//$url = U("Link/test/$tmp","$pid");
		$ch = curl_init("http://localhost/webinsights/adminLink.php/Link/writeDataBase/$tmp/$pid");  
		curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");                                                                       
		curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);                                                                    
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
		curl_setopt($ch, CURLOPT_TIMEOUT, 1); 
		curl_setopt($ch, CURLOPT_HTTPHEADER, array(                                                                            
			'Content-Type: application/json',                                                                                  
			'Content-Length: ' . strlen($data_string))                                                                         
		);    
		curl_exec($ch);
		curl_close($ch);
	}

	public function writeDataBase(){
		//   php      
		//sleep(10);
		$execlname = $_REQUEST['_URL_'][2];
		$project_id = $_REQUEST['_URL_'][3];
		$name = substr($execlname ,0,13 );
		$arr = F($name);
		
		$model = D('ItemsDetail');

		$data = array();
		ignore_user_abort(true); // run script in background
		set_time_limit(0); 
		foreach ( $arr as $k=>$v )
		{
			$data['linkname'] = $v['B'];
			$data['linkurl'] = $v['C'];
			$data['linktext'] = $v['F'];
			$data['loginurl'] = $v['E'];
			$data['pr'] = $v['D'];
			$data['project_id'] = $project_id;
            //info  
			$data['ItemsInfo'] = array(
				"project_id" =>	$project_id,
				"lxname"     =>	$v['A'],
				"lxqq"       =>	$v['K'],
				"lxemail"    =>	$v['M'],
				"lxtel"      =>	$v['L'],
				"fkname"     =>	$v['J'],
				"fkaccount"  =>	$v['I'],
				"fkprice"    =>	$v['H'],
			
			);
			$model->batAdd($data);
			
			sleep(1);
		}
		F($name,NULL);
		exit;
	}

<!-- [if gte mso 9]><xml>
 <w:WordDocument>
  <w:View>Normal</w:View>
  <w:Zoom>0</w:Zoom>
  <w:PunctuationKerning/>
  <w:DrawingGridVerticalSpacing>7.8  </w:DrawingGridVerticalSpacing>
  <w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery>
  <w:DisplayVerticalDrawingGridEvery>2</w:DisplayVerticalDrawingGridEvery>
  <w:ValidateAgainstSchemas/>
  <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
  <w:IgnoreMixedContent>false</w:IgnoreMixedContent>
  <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
  <w:Compatibility>
   <w:SpaceForUL/>
   <w:BalanceSingleByteDoubleByteWidth/>
   <w:DoNotLeaveBackslashAlone/>
   <w:ULTrailSpace/>
   <w:DoNotExpandShiftReturn/>
   <w:AdjustLineHeightInTable/>
   <w:BreakWrappedTables/>
   <w:SnapToGridInCell/>
   <w:WrapTextWithPunct/>
   <w:UseAsianBreakRules/>
   <w:DontGrowAutofit/>
   <w:UseFELayout/>
  </w:Compatibility>
  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
 </w:WordDocument>
</xml><![endif]--><!-- [if gte mso 9]><xml>
 <w:LatentStyles DefLockedState="false" LatentStyleCount="156">
 </w:LatentStyles>
</xml><![endif]--><!-- [if gte mso 10]>
<style><!--mce:1-->



キーコードの部分ですignore_について説明しますuser_abort(true)  set_time_Limit(0)sleep(1)この3つのPHP関数の用途
 
1つ目はPHPをバックグラウンドで自分でコードを実行させることです.その目的は、ユーザーがブラウザを閉じた後もコードが実行されていることです.つまり、ユーザーがEXECLファイルをサーバーに転送すれば、タスクは完了し、ブラウザを開いてデータのインポートが完了するまで必要はありません.
 
2番目の関数はPHPの実行時間を制御する.
 
3つ目の関数は、サーバの圧力を分散するためです.このように、ユーザーが大量のデータをインポートする過程で、ユーザーはインポートに成功したデータ情報の一部を表示し続けることができます.
 
httpRequest()関数の目的はPHPを使用してプロセスを開くことです
End