상황
1. n개의 서버에서 자료를 읽어 DB에 저장해야 한다.
2. 각 서버에 요청하고 자료를 받는데 걸리는 시간이 다양하다.
3. 이 과정을 수십~수백회 반복해야 한다.
4. 작업은 php로 해야 한다.
execute.php::서버에서 자료를 읽어오는 요청
$url = 'http://[URL]/request.php';
$current_date = new DateTime();
$max_num = 100;
for ( $i=0; $i<$max_num; $i++ ) {
$current_date->add( new DateInterval("P{$i}D") );
$params = array();
$params['START_DATE'] = $current_date->format('Y-m-d');
$params['END_DATE'] = $params['START_DATE'];
curl_request_async_curl( $url, $params );
}
function curl_request_async_curl( $url, $params )
{
$post_params = array();
foreach ( $params as $key => &$val ) {
if ( is_array($val) ) {
$val = implode(',', $val);
}
$post_params[] = $key . '=' . urlencode($val);
}
$post_string = implode('&', $post_params);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_string);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);
curl_exec($ch);
curl_close($ch);
}
request.php::각 서버에서 자료을 읽어 DB에 저장.
if ( $_SERVER['REMOTE_ADDR'] != $_SERVER['SERVER_ADDR'] ) {
exit; // execute.php과 동일 서버에서 접근 허용.
}
// http://www.php.net/manual/en/features.connection-handling.php#93441
ob_end_clean();
ignore_user_abort(true); // optional
header("Connection: close\r\n");
header("Content-Encoding: none\r\n");
header("Content-Length: 0");
ob_end_flush();
flush();
ob_end_clean();
// 각 서버에서 자료를 읽어 DB에 저장
......