/** * 指定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')); * * @param string $uri * @param array $hosts * @param array $param_arr * @return 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) { $project_config = Core::config('core.projects' . Core::$project); $script = $project_config['url']; if (is_array($script)) { $script = current($script); } if (isset($project_config['url_admin'])) { $script .= ltrim($project_config['url_admin'], '/'); } if (false === strpos($uri, '://')) { $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"]; } $uri = Core::url($uri); if (false === strpos($uri, '://')) { preg_match('#^(http(?:s)?\\://[^/]+/)#', $script, $m); $uri = $m[1] . ltrim($uri, '/'); } # http://host/uri $uri_arr = explode('/', $uri); $scr_arr = explode('/', $script); $uri_arr[0] = $scr_arr[0]; $uri_arr[2] = $scr_arr[2]; $uri = implode('/', $uri_arr); $time = microtime(1); if ($curl_supper) { # 调用CURL请求 $result = HttpCall::exec_by_curl($hosts, $uri, array('data' => serialize($param_arr))); } else { # 调用socket进行连接 $result = HttpCall::exec_by_socket($hosts, $uri, array('data' => serialize($param_arr))); } # 单条记录 if ($one) { $result = current($result); } if (IS_DEBUG) { Core::debug()->log('system exec time:' . (microtime(1) - $time)); Core::debug()->info($result, 'system exec result'); } return $result; }
/** * 指定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')); * * @param string $uri * @param array $hosts * @param array $param_arr * @return 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'); } $uri = Core::url($uri); if (false === strpos($uri, '://')) { preg_match('#^(http(?:s)?\\://[^/]+/)#', $_SERVER["SCRIPT_URI"], $m); $uri = $m[1] . ltrim($uri, '/'); } # http://host/uri $uri_arr = explode('/', $uri); $scr_arr = explode('/', $_SERVER["SCRIPT_URI"]); $uri_arr[0] = $scr_arr[0]; $uri_arr[2] = $scr_arr[2]; $uri = implode('/', $uri_arr); $time = microtime(1); if ($curl_supper) { # 调用CURL请求 $result = HttpCall::exec_by_curl($hosts, $uri, array('data' => serialize($param_arr))); } else { if (preg_match('#^https://#i', $uri)) { # https方式目前还不可以用 socket 模式 throw new Exception('system exec error.https url need use curl module.'); } # 调用socket进行连接 $result = HttpCall::exec_by_socket($hosts, $uri, array('data' => serialize($param_arr))); } # 单条记录 if ($one) { $result = current($result); } if (IS_DEBUG) { Core::debug()->log('system exec time:' . (microtime(1) - $time)); Core::debug()->info($result, 'system exec result'); } return $result; }