false, 'errno' => $errno, 'msg' => $err, 'info' => $info, ); } curl_close($ch); return array( 'result' => true, 'msg' => $ret, ); } /** * 从参数构造请求串 * @param type $params 如果是字符串直接返回,(关联)数组或者object(仅取public字段) * @return string 编码规范-RFC3986 */ public static function makeQueryString($params) { if (is_string($params)) { return $params; } return http_build_query($params, "", '&', PHP_QUERY_RFC3986); # 3986 } /** * 从参数构造Cookie字符串 * @param type $params 如果是字符串直接返回,(关联)数组或者object(仅取public字段) * @return string 编码规范-RFC3986 */ public static function makeCookieString($params) { if (is_string($params)) { return $params; } return http_build_query($params, "", "; ", PHP_QUERY_RFC3986); # 3986 } /** * 取Request过来的Data转为关联数组 * @return array */ public static function getQueryParas() { $param = $_REQUEST; if (isset($_SERVER['REQUEST_METHOD'])) { switch ($_SERVER['REQUEST_METHOD']) { case 'GET': $param = $_REQUEST; break; case 'POST': $str = file_get_contents('php://input'); $param = array_merge($param, ( strlen($str) > 0 ? self::parseQueryParas($str) : array())); break; default: } } return $param; } /** * 取Request过来的数据流转为字符串 * @return string */ public static function getQueryString() { $queryStr = null; if (isset($_SERVER['REQUEST_METHOD'])) { switch ($_SERVER['REQUEST_METHOD']) { case 'GET': $queryStr = $_SERVER['QUERY_STRING']; break; case 'POST': $queryStr = file_get_contents('php://input'); break; default: } } return $queryStr; } /** * 用于确保服务器只响应POST方法. */ public static function PostOnly() { if ($_SERVER['REQUEST_METHOD'] != 'POST') { header('Allow: POST ', false, 405); exit(); } } /** * 获取客户端ip地址及端口 * @return ip:port */ public static function getClientEP() { return $_SERVER['REMOTE_ADDR'] . ":" . $_SERVER['REMOTE_PORT']; } /** * 获取客户端IP地址(摘自discuz) * @return string */ public static function clientIP() { $ip = '未知IP'; if (!empty($_SERVER['HTTP_CLIENT_IP'])) { return self::is_ip($_SERVER['HTTP_CLIENT_IP']) ? $_SERVER['HTTP_CLIENT_IP'] : $ip; } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { return self::is_ip($_SERVER['HTTP_X_FORWARDED_FOR']) ? $_SERVER['HTTP_X_FORWARDED_FOR'] : $ip; } elseif (!empty($_SERVER['REMOTE_ADDR'])) { return self::is_ip($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : $ip; } else { return $ip; } } private static function is_ip($str) { $ip = explode('.', $str); for ($i = 0; $i < count($ip); $i++) { if ($ip[$i] > 255) { return false; } } return preg_match('/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$/', $str); } } /** * 取Request过来的Data转为关联数组 * @return array */ function query_paras() { return HttpUtil::getQueryParas(); } /** * 取Request过来的数据流转为字符串 * @return string */ function query_string() { return HttpUtil::getQueryString(); }