足球竞彩网:TP5.1 - Swoole在使用时候需要改造的几点

浏览:86 发布日期:2018/09/30
<足球外围网 id="eb7db7ce4f5ecb846"> <足球外围网 id="ea0cb5324242b850e"> 目前官方已经开放了
ThinkPHP5.1版本的swoole:
http://www.infinityeverywhere.net/zqwwwz/top-足球外围网/足球外围网-swoole

但是还有一些不完善的地方:

1.比如swoole中session中的运用: http://www.infinityeverywhere.net/zqwwwz/top-足球外围网/足球外围网-swoole/issues/39
2.在swoole中isAjax判断失效
3.在swoole中运用Nginx反向代理实时IP获取不到等问题
4.中间件的使用,无法使用controller,目前暂时控制器中间件
5.配置失效问题,每次请求完成后,重新初始化配置:http://www.infinityeverywhere.net/zqwwwz/top-足球外围网/足球外围网-swoole/issues/38


我们现在对这些问题改造一下

1.isAJax的判断失效

由于swoole中,jQuery的ajax头是通过header传递的,打开.Request.php核心内,将isAJax改造为: public function isAjax($ajax = false)
    {
        $value = $this->header('x-requested-with') ? $this->header('x-requested-with') : $this->server('HTTP_X_REQUESTED_WITH');
        $result = 'xmlhttprequest' == strtolower($value) ? true : false;

        if (true === $ajax) {
            return $result;
        }

        $result = $this->param($this->config['var_ajax']) ? true : $result;
        $this->mergeParam = false;
        return $result;
    }
2.在swoole中运用Nginx反向代理实时IP获取不到等问题
通过Nginx反向转发到Swoole内置的NgHttp的时候
配置如下:server{
    listen 80;
    server_name  demo.com;
    root /home/www/demo/public; # 该项要修改为你准备存放相关网页的路径

    location / {
         index  index.php index.html index.htm;
         #如果请求既不是一个文件,也不是一个目录,则执行一下重写规则
         proxy_http_version 1.1;
         proxy_set_header X-Real-IP $remote_addr;
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
         proxy_pass http://www.infinityeverywhere.net/zqwwwz:9501;
    }

}
由于Swoole接受真实IP X-Real-IP的时候是通过header头接受的,
所以将Request.php里的方法public function ip($type = 0, $adv = true)
    {
        $type = $type ? 1 : 0;
        static $ip = null;

        if (null !== $ip) {
            return $ip[$type];
        }

        $httpAgentIp = $this->config['http_agent_ip'];

        if ($httpAgentIp && $this->server($httpAgentIp)) {
            $ip = $this->server($httpAgentIp);
        } elseif ($adv) {
            if ($this->header('x-real-ip')) {
                $ip = $this->header('x-real-ip');
            }

           elseif ($this->server('HTTP_X_FORWARDED_FOR')) {
                $arr = explode(',', $this->server('HTTP_X_FORWARDED_FOR'));
                $pos = array_search('unknown', $arr);
                if (false !== $pos) {
                    unset($arr[$pos]);
                }
                $ip = trim(current($arr));
            } elseif ($this->server('HTTP_CLIENT_IP')){
            $ip = $this->server('HTTP_CLIENT_IP');
            } elseif ($this->server('REMOTE_ADDR')){
            $ip = $this->server('REMOTE_ADDR');
            }
        } elseif ($this->server('REMOTE_ADDR')) {
            $ip = $this->server('REMOTE_ADDR');
        }

        // IP地址类型
        $ip_mode = (strpos($ip, ':') === false) ? 'ipv4' : 'ipv6';

        // IP地址合法验证
        if (filter_var($ip, FILTER_VALIDATE_IP) !== $ip) {
            $ip = ('ipv4' === $ip_mode) ? '0.0.0.0' : '::';
        }

        // 如果是ipv4地址,则直接使用ip2long返回int类型ip;如果是ipv6地址,暂时不支持,直接返回0
        $long_ip = ('ipv4' === $ip_mode) ? sprintf("%u", ip2long($ip)) : 0;

        $ip = [$ip, $long_ip];

        return $ip[$type];
    }
<足球外围网 id="ad196de4c105c1d8be">
<足球外围网 id="ad6b7d22ed07ed248d">
评论(
后面还有条评论,点击查看>>
<足球外围网 id="e997c2acdc76d56ad">
免费白菜 免费彩金 彩金免费领 免费白菜网 免费彩金送 免费彩金网 免费给彩金 免费领彩金 免费送白菜