Ejemplo n.º 1
0
 /**
  * 指定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;
 }
Ejemplo n.º 2
0
 /**
  * 指定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;
 }