多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# **简介** webserver是一款笔者为了本服务器而开发的一款基于workerman的web服务器,其特点就是小、无过多繁琐代码,能满足基本的web需求,这里并没有单独的webservser提供如果想单独只使用webserver将GatewayWorker剔除即可。webserver的项目根目录为Applications/webApp。 本webserver基于workerman的[webserver](http://doc.workerman.net/web-server.html)开发所以应遵照其规范进行开发。 ## WorkerMan的Webserver与普通Web开发异同 ### 1、普通Web程序架构运行机制 一般的Web程序一般都是基于nginx+php-fpm或者apache+php的架构开发的,这些架构的运行机制一般是是每个请求都会经过请求初始化、创建执行环境、词法解析、语法解析、编译生成opcode以及请求关闭释放各种资源(如果有opcode缓存会跳过词法解析、语法解析、编译生成opcode步骤) ### 2、WorkerMan架构Web程序运行机制 WorkerMan是常驻内存的运行机制,只要PHP文件被载入编译过一次,便会常驻内存,不会再去从磁盘读取或者再去编译,并省去了重复的请求初始化、创建执行环境、词法解析、语法解析、编译生成opcode以及请求关闭释放各种资源等诸多耗时的步骤。剩下的只是简单的计算过程,所以性能很高。正因为常驻内存,所以类、函数、常量等定义代码只要运行一次,便可以永久使用,不会被销毁,所以要避免反复加载类、函数、常量等定义文件。比较简单的办法是使用require_once加载文件,避免重复加载重复定义。 ### 3、避免使用exit、die语句 同样的,在程序中避免使用exit、die语句,使用exit、die会导致进程退出。可以使用\Workerman\Protocols\Http::end($msg)函数替代exit、die函数。 ### 4、HTTP相关函数的使用 WorkerMan运行在PHP CLI模式下,PHP CLI模式下无法使用HTTP相关的函数,例如header、setcookie、session_start等函数,请使用/Workerman/Protocols/Http.php文件中的header、setcookie、sessionStart等方法替换,调用方式类似Workerman\Protocols\Http::header()。 ### 5、Web入口文件 WorkerMan的WebServer默认使用index.php作为Web入口文件,例如配置$webserver->setRoot('www.example.com', '/home/www/');,则www.example.com 的入口文件为/home/www/index.php。当url访问的文件(包括静态文件和PHP文件)不存在时,会自动调用入口文件index.php ### 6、可用的超全局变量 可用的超全局变量有$_SERVER、$_GET、$_POST、$_FILES、$_COOKIE、$_SESSION、$_REQUEST。 无法使用php://input,请用$GLOBALS['HTTP_RAW_POST_DATA']代替。 注意HTTP文件上传中,WorkerMan的$_FILES结构与传统PHP中的$_FILES结构不同,WorkerMan中$_FILES结构类似 ``` var_export($_FILES); array( 0 => array( 'file_name' => 'logo.png', // 文件名称 'file_size' => 23654, // 文件大小 'file_data' => '*****', // 文件的二进制数据 ), 1 => array( 'file_name' => 'file.tar.gz', // 文件名称 'file_size' => 128966, // 文件大小 'file_data' => '*****', // 文件的二进制数据 ), ... ); ``` 保存文件代码类似 ``` // 例如保存到/tmp目录下 foreach($_FILES as $file_info) { file_put_contents('/tmp/'.$file_info['file_name'], $file_info['file_data']); } ``` WorkerMan中无法使用move_uploaded_file() is_uploaded_file()这些函数。 # **开始使用** webserver的启动文件为Applications/webIm/start_webserver.php 使用webserver必须在[系统核心配置](系统核心配置.md) 中配置好相关配置, 然后在项目根目录使用命令 php start.php start即可启动(start.php会自动调用Applications/webIm/start_webserver.php)。其方式和[启动停止](启动停止)中介绍的一样,这里不再重复介绍。 启动后直接访问配置中填写的域名即可访问。具体地址规则详见[控制器](控制器)。 >[danger]注意:因workerman原理原因所有代码修改后需要重启进程才可生效,核心文件修改后需要用restart命令即php start.php restart,业务逻辑文件即子进程加载文件(一般为webApp中控制器视图和扩展文件等)修改用reload平滑重启命令即可即php start.php reload