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

189 Views Asked by At

I want to run the simple embedded webserver from php via command line

php -S 0.0.0.0:8000

and let it show the content of the current directory.

As of the man page the only possible additional option to -S is -t for the document root. I know I can just create a index.php file with the following content

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

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

but I don’t want to create a file in that directory.

Isn’t it possible to run that code as a command line argument? I have tried it with the option -r and even with a virtual bash file and the -F-option as follows: -F <(… php code here …) but it seems true that the -S command only accepts -t as additional command.

Is there any trick to achieve it?

PS: I know that with python 2 or python 3 it is easily possible to show the current directory with python’s embedded webserver with

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

but I want to do it with php.

1

There are 1 best solutions below

0
On

Replace "./" from the assignment of variable $directory with the complete path of the directory you want to serve. Or, even better, change it to:

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

to serve the path you provide as argument to -t in the command line.

Put index.php wherever you want in the file system and add its location (with complete path) to the end of the php command line.

If, for example, you save it as /home/erik/index.php, start PHP as:

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

PHP will use the script as a router. It will run it on every request and you can change it to interpret the request ($_GET[], $_SERVER[]) and generate different output, depending of the requested path and query string.