新增代码
server/http_server.php
<?php
/**
* Created by PhpStorm.
* User: guofeng
* Date: 2018/9/8
* Time: 上午11:21
*/
$http = new swoole_http_server('0.0.0.0',9501);
$http->set([
'enable_static_handler'=>true,
'document_root'=>'../public/static',
'worker_num'=>4,
]);
$http->on('WorkerStart',function(swoole_server $server,$worker_id){
// 定义应用目录
define('APP_PATH', __DIR__ . '/../application/');
// ThinkPHP 引导文件
// 1. 加载基础文件
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;
}
}
// 2. 执行应用
ob_start();
try{
think\App::run()->send();
}catch (\Exception $e){
//todo
}
$res = ob_get_contents();
ob_end_clean();
$response->end($res);
});
$http->start();
ThinkPHP 核心文件修改
thinkphp/library/think/Request.php
/**
* 获取当前请求URL的pathinfo信息(含URL后缀)
* @access public
* @return string
*/
public function pathinfo()
{
if(isset($_SERVER['PATH_INFO']) && $_SERVER['PATH_INFO'] !='/'){
return ltrim($_SERVER['PATH_INFO'], '/');
}
//if (is_null($this->pathinfo)) {
if (isset($_GET[Config::get('var_pathinfo')])) {
// 判断URL里面是否有兼容模式参数
$_SERVER['PATH_INFO'] = $_GET[Config::get('var_pathinfo')];
unset($_GET[Config::get('var_pathinfo')]);
} elseif (IS_CLI) {
// CLI模式下 index.php module/controller/action/params/...
$_SERVER['PATH_INFO'] = isset($_SERVER['argv'][1]) ? $_SERVER['argv'][1] : '';
}
// 分析PATHINFO信息
if (!isset($_SERVER['PATH_INFO'])) {
foreach (Config::get('pathinfo_fetch') as $type) {
if (!empty($_SERVER[$type])) {
$_SERVER['PATH_INFO'] = (0 === strpos($_SERVER[$type], $_SERVER['SCRIPT_NAME'])) ?
substr($_SERVER[$type], strlen($_SERVER['SCRIPT_NAME'])) : $_SERVER[$type];
break;
}
}
}
$this->pathinfo = empty($_SERVER['PATH_INFO']) ? '/' : ltrim($_SERVER['PATH_INFO'], '/');
//}
return $this->pathinfo;
}
/**
* 获取当前请求URL的pathinfo信息(不含URL后缀)
* @access public
* @return string
*/
public function path()
{
//if (is_null($this->path)) {
$suffix = Config::get('url_html_suffix');
$pathinfo = $this->pathinfo();
if (false === $suffix) {
// 禁止伪静态访问
$this->path = $pathinfo;
} elseif ($suffix) {
// 去除正常的URL后缀
$this->path = preg_replace('/\.(' . ltrim($suffix, '.') . ')$/i', '', $pathinfo);
} else {
// 允许任何后缀访问
$this->path = preg_replace('/\.' . $this->ext() . '$/i', '', $pathinfo);
}
//}
return $this->path;
}
访问方式
命令行 启动
php http_server.php
访问地址
http://localhost:9501/?s=index/index/index
http://localhost:9501/index/index/index