PHP内置Web Server

2024-01-30 42

CLI SAPI提供了一个内置的Web服务器,它可以用于本地开发和调试目的。这个内置的Web服务器仅适用于开发环境,不适合在生产环境中使用。内置的Web服务器提供了一个简单而方便的方式来运行和测试PHP应用程序,无需额外安装和配置独立的Web服务器软件。

可以直接使用命令行运行一个PHP脚本,然后通过浏览器访问指定的URL来查看和测试应用程序的输出。URI请求会被发送到PHP所在的的工作目录(Working Directory)进行处理,除非使用了-t参数来自定义不同的目录。

如果请求未指定执行哪个PHP文件,则默认执行目录内的index.php 或者 index.html。如果这两个文件都不存在,服务器会返回404错误。

当在命令行启动这个Web Server时,如果指定了一个PHP文件,则这个文件会作为一个“路由”脚本,意味着每次请求都会先执行这个脚本。如果这个脚本返回 false ,那么直接返回请求的文件(例如请求静态文件不作任何处理)。否则会把输出返回到浏览器。

一、启动Web服务器

$ cd ~/public_html
$ php -S localhost:8000

终端窗口会显示:

PHP 5.4.0 Development Server started at Thu Jul 21 10:43:28 2011
Listening on localhost:8000
Document root is /home/me/public_html
Press Ctrl-C to quit

接着访问http://localhost:8000/和http://localhost:8000/myscript.html,窗口会显示:

PHP 5.4.0 Development Server started at Thu Jul 21 10:43:28 2011
Listening on localhost:8000
Document root is /home/me/public_html
Press Ctrl-C to quit.
[Thu Jul 21 10:48:48 2011] ::1:39144 GET /favicon.ico - Request read
[Thu Jul 21 10:48:50 2011] ::1:39146 GET / - Request read
[Thu Jul 21 10:48:50 2011] ::1:39147 GET /favicon.ico - Request read
[Thu Jul 21 10:48:52 2011] ::1:39148 GET /myscript.html - Request read
[Thu Jul 21 10:48:52 2011] ::1:39149 GET /favicon.ico - Request read

二、指定根目录

$ cd ~/public_html
$ php -S localhost:8000 -t foo/

终端窗口显示:

PHP 5.4.0 Development Server started at Thu Jul 21 10:50:26 2011
Listening on localhost:8000
Document root is /home/me/public_html/foo
Press Ctrl-C to quit

三、使用路由脚本

请求图片直接显示图片,请求HTML则显示“Welcome to PHP”

<?php
// router.php
if (preg_match('/\.(?:png|jpg|jpeg|gif)$/', $_SERVER["REQUEST_URI"]))
return false; // 直接返回请求的文件
else { 
echo "<p>Welcome to PHP</p>";
}
?>
$ php -S localhost:8000 router.php

执行之后终端显示:

PHP 5.4.0 Development Server started at Thu Jul 21 10:53:19 2011
Listening on localhost:8000
Document root is /home/me/public_html
Press Ctrl-C to quit.
[Thu Jul 21 10:53:45 2011] ::1:55801 GET /mylogo.jpg - Request read
[Thu Jul 21 10:53:52 2011] ::1:55803 GET /abc.html - Request read
[Thu Jul 21 10:53:52 2011] ::1:55804 GET /favicon.ico - Request read

四、检查CLI网络服务器

在使用 CLI 网络服务器进行开发期间,重复使用框架路由器脚本,之后也可使用生产网络服务器:

<?php
// router.php
if (php_sapi_name() == 'cli-server') {
/* route static assets and return false */
}
/* go on with normal index.php operations */
?>
$ php -S localhost:8000 router.php

五、不支持的文件类型

如果需要提供 CLI 网络服务器无法处理其 MIME 类型的静态资源,请使用:

<?php
// router.php
$path = pathinfo($_SERVER["SCRIPT_FILENAME"]);
if ($path["extension"] == "el") {
header("Content-Type: text/x-script.elisp");
readfile($_SERVER["SCRIPT_FILENAME"]);
}
else {
return FALSE;
}
?>
$ php -S localhost:8000 router.php

六、从远程计算机访问

可以使用以下方法让任何界面都能通过 8000 端口访问网络服务器:

$ php -S 0.0.0.0:8000

注意:内置网络服务器不应在公共网络上使用。

  • 广告合作

  • QQ群号:707632017

温馨提示:
1、本网站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。邮箱:2942802716#qq.com(#改为@)。 2、本站原创内容未经允许不得转裁,转载请注明出处“站长百科”和原文地址。
PHP内置Web Server
上一篇: PHP交互式shell
PHP内置Web Server
下一篇: PHP引用计数基础