怎么在PHP中对http_server进行配置

怎么在PHP中对http_server进行配置?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

一、创建一个简单的http服务

怎么在PHP中对http_server进行配置

<?php
//创建一个httpserver服务
$server=newswoole_http_server('0.0.0.0',8888);

$server->set([
'package_max_length'=>1024*1024*10,
//设置文件上传的临时目录
'upload_tmp_dir'=>__DIR__.'/uploads/',
]);

//设置request事件回调
//函数有两个参数:
//swoole_http_request对象,负责http请求相关信息
//swoole_http_response对象,负责向客户端响应相关信息
$server->on('request',function(swoole_http_request$request,swoole_http_response$response){
//请求的头部信息
var_dump($request->header);

//请求相关的服务器信息,相当于PHP中的$_SERVER
var_dump($request->server);

//请求的GET参数,相当于PHP中的$_GET
var_dump($request->get);

//请求的POST参数,相当于PHP中的$_POST
var_dump($request->post);

//请求的COOKIE信息
var_dump($request->cookie);

//文件上传信息,文件大小不超过package_max_length的值
var_dump($request->files);

//获取原始POST请求数据,相当于fopen('php://input');
var_dump($request->rawContent());

//获取完整http请求报文
var_dump($request->getData());

//向客户端发送信息
$response->end('hello');
});

//启动服务
$server->start();

二、处理静态文件

swoole中已经帮我们内置了两个配置参数,只需要简单配置一下就可以实现。

不过功能简易,不建议外网使用,有需求的可以自已实现。

<?php
$server=newswoole_http_server('0.0.0.0',8888);

$server->set([
//配置静态文件根目录
'document_root'=>__DIR__.'/statics/',
//开启静态文件请求处理功能,这样当请求的是一个静态文件时,swoole自动会在上面配置的目录中查找并返回
'enable_static_handler'=>true,
]);

$server->on('request',function($request,$response){

});

$server->start();

三、处理文件上传

<?php
//创建一个httpserver服务
$server=newswoole_http_server('0.0.0.0',8888);

$server->set([
//文件上传大小不超过该值
'package_max_length'=>1024*1024*50,
//设置文件上传的临时目录
'upload_tmp_dir'=>__DIR__.'/tmp/',
'upload_dir'=>__DIR__.'/uploads/',
'document_root'=>__DIR__.'/statics/',
'enable_static_handler'=>true,
]);

$server->on('request',function($request,$response)use($server){
if($request->server['path_info']=='/upload'){
$tmp=$request->files['upload']['tmp_name'];
$upload=$server->setting['upload_dir'].$request->files['upload']['name'];
if(file_exists($tmp)&&
move_uploaded_file($tmp,$upload)){
$response->header('Content-Type','text/html;charset=UTF-8');
$response->end('上传成功');
}else{
$response->end('上传失败');
}
}
});

//启动服务
$server->start();

我们在statics目录下创建一个upload.html文件:

<!doctypehtml>
<htmllang="zh-CN">
<head>
<metacharset="UTF-8">
<title>文件上传</title>
</head>
<body>
<formaction="/upload"method="post"enctype="multipart/form-data">
<inputtype="file"name="upload"value="">
<inputtype="submit"value="提交">
</form>
</body>
</html>

四、处理路由文件自动加载

<?php
//创建一个httpserver服务
$server=newswoole_http_server('0.0.0.0',8888);

$server->set([
//配置项目的目录
'project_path'=>__DIR__.'/src/',
]);

$server->on('WorkerStart',function($server,$worker_id){
//注册自动加载函数
spl_autoload_register(function($class)use($server){
$class=$server->setting['project_path'].str_replace('\\',DIRECTORY_SEPARATOR,$class).'.php';

if(file_exists($class)){
include_once$class;
}
});
});

$server->on('request',function($request,$response)use($server){
$pathInfo=explode('/',ltrim($request->server['path_info'],'/'));

//模块/控制器/方法
$module=$pathInfo[0]??'Index';
$controller=$pathInfo[1]??'Index';
$method=$pathInfo[2]??'index';

try{
$class="\\{$module}\\{$controller}";
$result=(new$class)->{$method}();
$response->end($result);
}catch(\Throwable$e){
$response->end($e->getMessage());
}
});

//启动服务
$server->start();

我们在目录 src 下创建 test 目录,并创建 test.php 文件

<?php
namespaceTest;

classTest
{
publicfunctiontest()
{
return'test';
}
}

然后访问 127.0.0.1:8888/test/test/test 就可以看到返回结果了。

通过$request->server['path_info'] 来找到模块,控制器,方法,然后注册我们自已的加载函数,引入文件。实例化类对象,然后调用方法,返回结果。

注意,不要将 spl_autoload_register 放到 onStart 事件回调函数中。

onStart 回调中,仅允许echo、打印Log、修改进程名称。不得执行其他操作。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注恰卡编程网行业资讯频道,感谢您对恰卡编程网的支持。

发布于 2021-03-21 22:39:15
收藏
分享
海报
0 条评论
158
上一篇:如何在vue中使用token 下一篇:怎么在CSS3中使用颜色值RGBA与渐变色
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码