Я хочу запустить простой встроенный веб-сервер из 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.
замещать "./"
из присваивания переменной $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[]
) и генерировать различный вывод в зависимости от запрошенного пути и строки запроса.
Других решений пока нет …