请求接口不同出现返回信息一致和上传图片接口获取不到的情况

来源:8-7 赛事直播员图片发布 - 上传图片(一)

我心依然_Song

2020-03-01

麻烦老师看下这两个是什么原因造成的,自己暂时还没看出来。。

1.下面两个分别是获取验证码和登录的接口,校验返回信息是不一样的,但是会出现获取不到或者两个一样的情况。
图片描述
图片描述
代码:
图片描述

2.上传图片
图片描述
图片描述

代码:

控制器

class Image {

  public function index() {
    var_dump($_FILES);
    // $file = request()->file('file');
    // var_dump($file);
    // $info = $file->move('../public/static/upload');
    // var_dump($info);
  }
 }

ws.php

<?php

class Ws {
    const HOST = '0.0.0.0';
    const PORT = '8811';

    public $ws = null;

    public function __construct() {
        $this->ws = new swoole_websocket_server(self::HOST, self::PORT);
        $this->ws->set([
            "enable_static_handler" => true,
            "document_root"         => "/www/wwwroot/swoole_pjt/public/static",
            "worker_num"            => 4,
            'task_worker_num'       => 4
        ]);
        $this->ws->on('open', [$this, 'onOpen']);
        $this->ws->on('message', [$this, 'onMessage']);
        $this->ws->on('workerStart', [$this, 'onWorkerStart']);
        $this->ws->on('request', [$this, 'onRequest']);
        $this->ws->on('task', [$this, 'onTask']);
        $this->ws->on('finish', [$this, 'onFinish']);
        $this->ws->on('close', [$this, 'onClose']);

        $this->ws->start();
    }

    public function onOpen($ws, $request) {
      print_r($request->fd);
    }

    public function onMessage($ws, $frame) {
      echo "ser-push-message:".$frame->data.PHP_EOL;
      $ws->push($frame->fd, 'server-push:'.date('Y-m-d H:i:s'));
    }

    public function onWorkerStart($server, $worker_id) {
        define('APP_PATH', __DIR__ . '/../application/');
        define('MELON_ROOT', __DIR__ . '/../');
        // 定义插件目录
        define('PLUGIN_PATH', MELON_ROOT . 'plugin/');

        define('UPLOADS', __DIR__ . '/uploads');
        // 定义核心包目录
        define('MELON_LTR', MELON_ROOT . 'watermelon/melon/');
        // 定义配置文件目录
        define('CONF_PATH', MELON_ROOT . 'config/');
        // 定义应用的运行目录
        define('RUNTIME_PATH', MELON_ROOT . 'runtime/');
        // 加载ThikPHP引导文件
        require __DIR__ . '/../watermelon/thinkphp/base.php';
    }

    public function onRequest($request, $response) {
        $_SERVER = [];
        if (isset($request->server)) {
            foreach ($request->server as $k => $v) {
                $_SERVER[strtoupper($k)] = $v;
            }
        }

        if (isset($request->header)) {
            foreach ($request->header as $k => $v) {
                $_SERVER[strtoupper($k)] = $v;
            }
        }
        $_GET = [];
        if (isset($request->get)) {
            foreach ($request->get as $k => $v) {
                $_GET[$k] = $v;
            }
        }
        $_POST = [];
        if (isset($request->post)) {
            foreach ($request->post as $k => $v) {
                $_POST[$k] = $v;
            }
        }
        $_FILES = [];
        if (isset($request->files)) {
            foreach ($request->files as $k => $v) {
                $_FILES[$k] = $v;
            }
        }
        print_r($_FILES);
        $_POST['http_server'] = $this->ws;

        $result = ob_start();
        // var_dump('开启缓冲:'.$result).PHP_EOL;
        try {
            think\Container::get('app', [APP_PATH])->run()->send();
        } catch (Exception $e) {

        }
        $result = ob_get_contents();
        // var_dump('获取缓冲内容:'.$result).PHP_EOL;
        if(!empty($result)){
            //清空缓存区
            ob_end_clean();
        }
        // 结束请求
        $response->end($result);
        // unset($result);
    }

    public function onTask($server, $taskId, $workerId, $data) {
        //分发task任务
        $task = new \app\common\task\Task();
        $method = $data['method'];
        $flag = $task->$method($data['data']);
        return $flag;
    }

    public function onFinish($server, $taskId ,$data) {
            echo "taskId:".$taskId.PHP_EOL;
            echo "finish task data-success:".$data.PHP_EOL;
    }

    public function onClose($ws, $fd) {
        echo "clientId:".$fd.PHP_EOL;
    }
}

new Ws();

写回答

1回答

hwkkevin

2020-03-02

  1. 是否重启ws.php文件
    2.可以进行断点排查

  2. ws.php 内onWorkerStart的方法,只需加载
    define('APP_PATH', __DIR__ . '/../application/');
    require __DIR__ . '/../thinkphp/start.php';

0
1
我心依然_Song
每次都重启了。。这加载的也没关系吧
2020-03-02
共1条回复

Swoole入门到实战打造高性能赛事直播平台

swoole创始人推荐,借助Swoole打造高性能直播平台

2228 学习 · 1062 问题

查看课程