指定Server执行系统内部调用
//指定多个服务器执行
HttpServer::exec('test/abc',array('192.168.1.11:8080','192.168.1.12:80'),array('a','b','c'));
//指定一个服务器执行
HttpServer::exec('test/abc','192.168.1.11:8080'array('a','b','c'));
array Core_HttpCall::exec( string $uri , array $hosts [, array $param_arr = array(0) ] )
参数列表
参数 类型 描述 默认值 $uri
string
$uri $hosts
array
$hosts $param_arr
array
$param_arr array(0)
array
public static function exec($uri, $hosts , array $param_arr = array())
{
$one = false;
if (is_string($hosts))
{
$hosts = array($hosts);
$one = true;
}
# 是否支持CURL
static $curl_supper = null;
if (null===$curl_supper)$curl_supper = function_exists('curl_init');
if (IS_CLI)
{
$url_site = Core::config('core.url.site');
if (!$url_site)
{
throw new Exception(__('your core config $config[\'url\'][\'site\'] is not defined.check config:ext', array(':ext'=>EXT)));
}
$script = $url_site . ltrim($script, '/');
}
else
{
$script = $_SERVER["SCRIPT_URI"];
}
$url = Core::url($uri);
if (false===strpos($url, '://'))
{
preg_match('#^(http(?:s)?\://[^/]+/)#', $script , $m);
$url = $m[1].ltrim($url, '/');
}
# http://host/uri
$uri_arr = explode('/', $url, 3);
$scr_arr = explode('/', $script, 3);
$uri_arr[0] = $scr_arr[0]; // 替换 http://
$uri_arr[2] = $scr_arr[2]; // 替换 域名部分
$url = implode('/', $uri_arr);
# 加入系统参数
$data = array
(
'data' => serialize($param_arr),
);
$time = microtime(1);
if ($curl_supper)
{
# 调用CURL请求
HttpCall::$last_result = HttpCall::exec_by_curl($hosts, $url, '/'.ltrim($uri, '/'), $data);
}
else
{
# 调用socket进行连接
HttpCall::$last_result = HttpCall::exec_by_socket($hosts, $url, '/'.ltrim($uri, '/'), $data);
}
# 单条记录
if ($one)$result = current(HttpCall::$last_result);
if (IS_DEBUG)
{
Core::debug()->log('system exec time:'.(microtime(1)-$time));
Core::debug()->info($result, 'system exec result');
}
return $result;
}