选择语言 :

 Core_HttpCall::exec

指定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
File: ./core/classes/httpcall.class.php
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;
}