0

我想通过命令行从 php 运行简单的嵌入式网络服务器

php -S 0.0.0.0:8000

并让它显示当前目录的内容。

从手册页开始,唯一可能的附加选项-S-t文档根目录。我知道我可以创建一个index.php包含以下内容的文件

<html>
<body>
<?php
  $directory = "./";
  $files = glob($directory . "*");

  foreach($files as $file) {
    echo "<a href=".rawurlencode($file).">".basename($file)."</a><br>";
  }
?>
</body>
</html>

但我不想在该目录中创建文件。

不能将该代码作为命令行参数运行吗?我已经尝试使用该选项-r,甚至使用虚拟 bash 文件和 -选项,-F如下所示:-F <(… php code here …)但该-S命令似乎只接受-t作为附加命令。

有什么诀窍可以实现吗?

PS:我知道使用 python 2 或 python 3 很容易使用 python 的嵌入式网络服务器显示当前目录

python -m SimpleHTTPServer   # python 2
python -m http.server        # python 3

但我想用 php 来做。

4

1 回答 1

1

用您要服务的目录的完整路径替换"./"变量的分配。$directory或者,更好的是,将其更改为:

$directory = $_SERVER['DOCUMENT_ROOT'].'/';

-t提供您在命令行中作为参数提供的路径。

将其放置index.php在文件系统中的任何位置并将其位置(带有完整路径)添加到php命令行的末尾。

例如,如果将其另存为/home/erik/index.php,则将 PHP 启动为:

php -S 0.0.0.0:8000 -t /home/erik/web /home/erik/index.php

PHP 将使用脚本作为路由器。它将在每个请求上运行它,您可以更改它以解释请求 ( $_GET[], $_SERVER[]) 并根据请求的路径和查询字符串生成不同的输出。

于 2015-08-14T22:46:39.090 回答