如何显示文件在当前目录与嵌入式PHP web服务器(作为命令行)


how to show files in current directory with embedded php webserver (as command line)

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

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的嵌入式web服务器

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

但是我想用php

将变量$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[])并生成不同的输出,这取决于所请求的路径和查询字符串。