1. 程式人生 > >TP5.1+原生swoole完美整合,解決常見問題

TP5.1+原生swoole完美整合,解決常見問題

delet info sset debug error resp 執行 upper 沒有

1. 在tp框架根目錄下建立server\http_server.php文件

<?php

use Swoole\Http\Server as HttpServer;

$http = new HttpServer("127.0.0.1", 8811);

$http->set([
    'worker_num' => 5,
    'enable_static_handler' => true,
    'document_root' => '/home/buinar/www/swoole/livematches/public/static',
    //document_root目錄下要放一個ico圖標,為了防止瀏覽器請求ico圖標時走下面的流程
    'log_level' => SWOOLE_LOG_ERROR, // 日誌等級 關閉開啟debug
    'trace_flags' => SWOOLE_TRACE_SERVER, // 日誌等級 關閉開啟debug
    
]);

$http->on('WorkerStart',function($server, $worker_id){
    // 定義應用目錄
    define('APP_PATH', __DIR__ . '/../application/');
    //加載框架引導文件
    require __DIR__ . '/../thinkphp/base.php';
});

$http->on('request', function ($request, $response) use($http){
    $_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;
        }
    }

    ob_start();
    try {
        // 執行應用並響應
        \think\Container::get('app',[APP_PATH])->run()->send(); 
    } catch (\Exception $e) {
        echo $e->getMessage();
    }
    $res = ob_get_clean();
    // var_dump($res);
    $response->end($res);
    // $http->close($response->fd);  //關閉客戶端連接,重新加載框架內容
});
$http->start();

2. 找到thinkphp/library/think/Request.php文件

function path 中的if (is_null($this->path)) {},這裏不需要判斷,只註釋條件即可,裏面的內容不動

function pathinfo中的if (is_null($this->pathinfo)) {},這裏不需要判斷,只註釋條件即可,裏面的內容不動

結尾:常見問題

1.報錯:Fatal error: Uncaught think\exception\ErrorException: ob_end_clean(): failed to delete buffer.


加載框架不成功,檢查自己是否寫正確

2.echo會默認輸出兩次
這是因為document_root目錄下沒有ico文件,瀏覽器自動請求的,上面有解決方案

thinkphp5.1以上官方已經整合swoole了,建議用tp官網整合的swoole。

TP5.1+原生swoole完美整合,解決常見問題