人人都能看懂的全栈开发教程——Web 服务

人人都能看懂的全栈开发教程——Web 服务

Chris Yue No Comment
Posts

我们完成了在命令行下列出数据库里的任务,但我们还没有完成在网页上列出数据库里的任务,事实上,我们现在连 Web 服务都还没有。

好在 PHP 现在已经自带 Web 服务了。我们可以在项目根目录中,执行下面命令来开启一个 Web 服务:

php -S localhost:8000
# 或者
php -S 127.0.0.1:8000
# 或者
php -S 0.0.0.0:8000

成功运行之后,大家使用浏览器,访问 http://localhost:8000/index.php,可以发现之前在命令行里出现的结果,也出现在了网页上!注意我们的访问地址,也出现了 8000 这个数字。

-S 参数,即 Server,创建 Web 服务,记得之前说过 grep 有 --help 参数可以查看使用说明,其实大部分工具都有,大家可以看看 PHP 的帮助里是怎么描述 -S 参数的。多看帮助和手册也是一个好习惯。

不知道大家是否还记得我之前是怎么描述服务的?服务往往有『端口』,上面命令里面的 8000 就是我们的 Web 服务指定的端口,当然我们也可以换成别的数,只要浏览器访问时也修改对应的端口号即可。

需要注意的是,端口号也是有极限的,大家可自行搜索端口号目前的范围,另外从发展的眼光看,我觉得这个极限在未来也有可能会变。

另外,也不是所有的端口号都是可以设置的,端口号 1024 以内的无法开启服务,除非通过之前见过的 sudo 来提升权限。

关于端口号还有一点,对于不同的服务,是有默认规定的端口的。不知道大家是否有疑惑过,为啥访问别人的网站时,就不需要指定端口号呢?那是因为 HTTP 服务(网页服务),默认规定的端口是 80,所以你访问 http://www.chrisyue.com:80 跟访问 http://www.chrisyue.com 是一样的。除了网页,我们的老朋友 MySQL,也有自己的默认端口,还记得我们之前如何使用 MySQL 客户端链接 MySQL 服务的吗?事实上我们省略了端口参数,MySQL 默认端口为 3306,我们也可以配置 MySQL 服务监听另外一个端口号比如 13306,那么我们连 MySQL 服务时就应该加上端口参数 -P

mysql -u root -p 123456 -P 13306

端口说完了,再来说 IP,在网络中,有若干机器,每台机器都需要用一个 IP 来标识方便其他机器去访问它。但 127.0.0.1 是一个很特殊的 IP,它用来指代机器本身,所以每台机器都会被分配一个 127.0.0.1 来表示它自己。IPv6 里这个 IP 是 ::1

因为 IP 都比较难记,所以我们会用『域名』对应 IP 的方式,来将 IP 转化成一个更好记忆的单词。这个域名 => IP 的对应表来源有很多,我们自己可以修改的就是本机的 /etc/hosts 文件(Windows 也有这个文件,我已经很久没用 Windows 了大概是 C:\Windows\System32\Drivers\etc\hosts),执行一下命令可以查看 hosts 文件的内容

cat /etc/hosts

可以看到 127.0.0.1 的域名就是 localhost,也就是说,当我们访问 localhost 的时候,访问的就是 127.0.0.1 这台机器,也就是本机。

当我们指定了某个服务是 127.0.0.1,这个服务和 IP 127.0.0.1 绑定了,绑定的意思是,只有浏览器访问地址为 localhost 或者 127.0.0.1 时才能访问到它,那也就是说这个网站只能本地访问了。

在来看第三种写法,准确来说,0.0.0.0 就不是一个 IP,它标识此服务并不严格绑定在某个 IP 上,只要端口没问题,无论访问的 IP 是什么,只要这个 IP 能找到这台机器,都可以访问。

在某些操作系统上,如果将 Web 服务通过第三种方式运行,可能系统的防火墙就会提醒你是否要这么做,这就是因为你不把服务绑定在本机 IP 上,网络里的其他机器都可以通过局域网的 IP 访问服务,因此会有安全风险需要提醒你一下。

我再举一个简单的例子说明,假如你的电脑在局域网里的 IP 是 192.168.0.2,如果你开启的服务是绑定在 127.0.0.1,那么局域网其他的用户是不能通过 192.168.0.2:8000 来访问你的服务的,但如果通过第三种方式,那么局域网的其他机器就可以访问了。再融会贯通一下,如果开启服务时绑定的 IP 是 192.168.0.2呢?这个问题就留给大家自己思考吧,有条件的话建议大家自己尝试一下。

前面说的都是 Web 服务与 IP 绑定,实际上 Web 服务也可以和域名绑定,当 Web 服务与某个域名绑定只有,就只能用域名访问了。如果你是通过第一种方法,也就是绑定 localhost 的方式启动的 Web 服务,那你只能通过 localhost 域名来访问,而不能用 127.0.0.1

再说一个习惯性约定:几乎所有的 Web 服务器,都将 index.* 当成是『索引页』,这里的 * 可以是 html 也可以是 php,而索引页在访问的时候都是可以忽略不写的,因为我们的文件名已经是 index.php 了,所以实际上我们也可以忽略文件名,直接通过地址 http://localhost:8000 来访问。

最后,使用 Ctrl + C 可以停止服务。运行 php -S 命令后,如果你有好好看命令的输出,实际当时就已经告诉你如何关闭服务了。运行某个命令之后,如果有输出,仔细看看输出说什么也是一个好习惯,往往包含了很多值得你知道的信息

人人都能看懂的全栈开发教程——Web 服务 by Chris Yue is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.

微信赞赏码

如果觉得文章还不错,就请扫码鼓励一下作者吧
天使打赏人

发表评论

− 1 = 6