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:
$uri_arr
=
explode
(
'/'
,
$url
, 3);
$scr_arr
=
explode
(
'/'
,
$script
, 3);
$uri_arr
[0] =
$scr_arr
[0];
$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
;
}