在很多时候,咱们须要简略的运行一个小 demo 来验证一些代码或者轮子是否可用,是否能够运行起来,然而去配 nginx 或者 apache 都很麻烦,其实,PHP CLI 曾经提供了一个简略的测试服务器,咱们间接就能够运行起来进行简略的一些测试工作。

间接启动一个内置服务器

php -S localhost:8081

间接应用 -S 命令选项,而后指定地址及端口号,咱们就能够运行起来一个 PHP 内置的繁难WEB服务器。默认状况下,这个地址会找当前目录下的 index.php 或 index.html 文件。当咱们在浏览器输出指定的文件时,就是拜访指定的文件,如果都没有找到会失常的返回404谬误。

而控制台会输入以后服务器的拜访状况,如下图所示:

这个内置服务器和用 nginx 等服务器搭起来的应用服务器实质上没有太大的区别,包含 $_SERVER 之类的内容都能够失常获取到,也能够失常应用 include 等性能加载其余文件,也就是说这个内置WEB服务器运行一些框架也是没有问题的。它是能够齐全满足咱们的测试要求的。然而须要留神的是,这个内置WEB服务器不能用于生产环境。毕竟它的性能还是太简略,不是一个生产装备的高规格服务器利用。

指定内置服务器的运行目录

咱们也能够在任何目录去运行指定目录的php代码,只须要再减少一个 -t 选项来指明要运行起服务器的根目录即可。

php -S localhost:8081 -t dev-blog/php/202004/source

这样咱们就能够运行起来一个以 dev-blog/php/202004/source 目录为根目录的测试环境服务器。

应用路由脚本

php -S localhost:8081 PHP的内置WEB服务器.php

如果咱们给以后服务器间接指定了一个PHP文件,那么间接关上链接就会拜访的是这个文件的内容,而不是去找 index.php 之类的文件。即便咱们持续给 URL 后盾减少其余门路或者其余文件名,它仍然会关上的是这个文件,也就是说,咱们启动了一个单文件入口的应用服务器程序。就像各种框架的 index.php 文件一样,比方咱们利用这个文件做一个简略的路由散发测试:

$routePages = [    '/testRoute2.php',    '/route/testRoute1.php'];if(in_array($_SERVER['REQUEST_URI'], $routePages)){    include __DIR__ . $_SERVER['REQUEST_URI'];}else{    print_r($_SERVER);}
// route/testRoute1.phpecho "Hello Route1!";// testRoute2.phpecho "Hello Route2!";

两个测试文件只是简略的输入了一段文字用于区别别离加载了两个文件。上述代码的意思是咱们拜访定义好的两个路由门路时,就会加载对应的文件,拜访其余门路则会打印以后服务器的 $_SERVER 信息。

测试代码:
https://github.com/zhangyue0503/dev-blog/blob/master/php/202004/source/PHP%E7%9A%84%E5%86%85%E7%BD%AEWEB%E6%9C%8D%E5%8A%A1%E5%99%A8.php

参考文档:
https://www.php.net/manual/zh/features.commandline.webserver.php

===========

各自媒体平台均可搜寻【硬核项目经理】