不使用 apche/nginx,php 命令如何启动 www 服务?
发布于 作者:苏南大叔 来源:程序如此灵动~
php从5.4版本开始,已经支持内置的webserver。也就是说:可以不使用apache,也不使用nginx,只要你的命令行能够识别php这个命令,那么就可以通过这个php命令,来启动一个www服务了。
当然,这样启动的php网站,就不能享受到传统的.htaccess或者nginx.cnf的rewrite的好处了。但是,也是为大家打开了一扇新的大门,不是嘛?

在本文中,苏南大叔将要描述php命令,如何启动一个网站www服务。本文内容,不分操作系统,只要你的php大于等于5.4,在命令行中可以正确识别php命令即可。测试环境:mac,php@7.2.2。
基本启动命令
php -S <domain>:<port>苏南大叔cd到网站代码的根目录下面,然后执行如下命令,就可以启动一个http://localhost:8000的网站服务了。
cd <www_root>/
php -S localhost:8000
下面是相关要点:
php的参数-S,注意后面的值没有http://字样,而且必须有端口号。- 如果这里写的不是
127.0.0.1本机地址,而是localhost,或者一个自定义的域名,比如my.test的话,那么就必须严格按着你填写的这个域名和端口号来访问。 - 而且特别强调的是,千万注意端口冲突。比如
80很有可能会和nginx/apache/iis冲突,9000很可能和php-fpm冲突。
设置网站代码根目录
php -S <domain>:<port> -t <www_root>/本节的内容,增加了新的参数-t。如果不写-t参数的话,就默认当前目录就是网站的根目录,也就是说下面的这两条命令是等同的。
php -S localhost:8000等同于
php -S localhost:8000 -t ./
当然,如果你想给当前目录下的sub目录,单独开一个新的网站的话,命令就是:
php -S localhost:8000 -t sub/指定php.ini
如果对于php的细节进行定制的话,就必须指定php.ini了。
php -S localhost:8000 -c php.ini注意,这里的php.ini最好写绝对路径,比如:
php -S localhost:8002 -c D:\tools\phpstudy_pro\Extensions\php\php8.2.9nts\php.ini -t E:\test\php\否则,这个php.ini的路径确实有歧义,是从php.exe路径开始找,还是在当前路径开始找?亦或是从代码根目录开始找?有歧义啊对不?
关键是,这个-c参数指定一个不存在的php.ini的文件名,依然也不会报错,这就非常的令人迷惑不解了。
注意事项
这里有个需要注意的问题就是,在这里的localhost和127.0.0.1并不相等,并不能替换。参考下面的图片:

使用127.0.0.1访问的话,会被拒绝服务。
相关链接
结论
最基本的用法就是上述这些了。但是,毕竟抛弃了大家常用的nginx和apache的概念,所以,苏南大叔个人建议:拿来做简单测试还好吧,毕竟敲个命令也蛮简单的。但是拿来做生产环境的话,可就要三思了。
这种使用方式和node的使用方式实在是太相似了,在控制台中还能看到php报错信息。所以,也还是有一定的使用场景的。
更多苏南大叔的php相关经验文章,请点击这里查看: