TP5.1+原生swoole完美整合,解決常見問題
阿新 • • 發佈:2019-05-14
delet info sset debug error resp 執行 upper 沒有 1. 在tp框架根目錄下建立
加載框架不成功,檢查自己是否寫正確
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完美整合,解決常見問題