我想通过命令行从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[]
)并生成不同的输出,这取决于所请求的路径和查询字符串。