Когда я пытаюсь заставить этот код работать на встроенном php-сервере, он не работает.
Я пытаюсь сделать следующее:
php -S 0.0.0.0:8000 file.php эту команду в cmd. Далее я печатаю
http://localhost:8000 в браузере.file.php, страница очищает свое содержимое, но не изменяется должным образом.
Однако в адресной строке есть изменения.Файл 1.
<!DOCTYPE html>
<html>
<head>
<title>PHP</title>
<meta http-equiv = "Content-Type" content = "text/html; charset=utf-8" />
</head>
<body>
<form action = "example.php" method = "post">
Count:
<input type = "text" name = "Example">
<input type = "submit" value = "Click">
</form>
</body>
</html>
Файл 2.
<!DOCTYPE html>
<html>
<head>
<title>PHP</title>
<meta http-equiv = "Content-Type" content = "text/html; charset=utf-8" />
<body>
<?php echo $_POST['Example']; ?>
</body>
</html>
Внутренний сервер PHP всегда передает все запросы к файлу, который вы определяете при его запуске. Поэтому, когда URL изменится на example.php, он все равно будет идти на file.php. Ваше приложение должно проверить запрошенный URL-адрес и выполнить правильное действие в зависимости от запрошенного URI, как и большинство фреймворков и CMS.
Итак, как это может работать из командной строки? Это возможно? (в целях тестирования не то, что требует слишком много усилий) И как я могу определить этот файл?
Вы можете переименовать свой file.php в index.php и вообще не определять файл при запуске сервера. Тогда это должно работать. Из руководства: «Если файл PHP передается в командной строке при запуске веб-сервера, он рассматривается как сценарий «маршрутизатора». Сценарий запускается в начале каждого HTTP-запроса. Если этот сценарий возвращает FALSE, то запрошенный ресурс возвращается как есть. В противном случае выходные данные скрипта возвращаются в браузер».
Сейчас проверю, большое спасибо за ответы :) Не за что.
Хорошо, я переименовал файл, и на самом деле ничего не изменилось :/
Это странно. Я попробовал это, и это сработало здесь. Я переименовал file.php в index.php, затем запустил сервер с помощью php -S 0.0.0.0:8000 (без имени файла)
Хорошо, это работает без указания имени файла. :)
Это из-за первого предложения, которое я разместил в руководстве: «Если файл PHP передается в командной строке при запуске веб-сервера, он обрабатывается как сценарий «маршрутизатора»..
Да, я думаю, мне следует углубиться в руководство, но еще раз спасибо :) Вы молодец!
Я опубликую правильный ответ, чтобы вы могли закрыть вопрос, приняв его.






Как говорит руководство: "Если файл PHP указан в командной строке при запуске веб-сервера, он обрабатывается как скрипт "маршрутизатор""
Это означает, что если вы определите file.php при запуске веб-сервера, запросы все будут нацелены на file.php, и ваше приложение должно обрабатывать маршрутизацию.
Если вы не хотите этого делать, вам нужно переименовать начальный файл file.php в index.php (это файл по умолчанию, который ищет веб-сервер, если вы не передаете имя файла).
Теперь вы можете запустить сервер, используя:
php -S 0.0.0.0:8000
и он должен работать так, как ожидалось.
При использовании имени файла для веб-сервера командной строки вы указываете сценарий маршрутизатор, поэтому вы можете сами закодировать свою стратегию маршрутизации в файле:
If a PHP file is given on the command line when the web server is started it is treated as a "router" script. The script is run at the start of each HTTP request. If this script returns FALSE, then the requested resource is returned as-is. Otherwise the script's output is returned to the browser.
через http://php.net/manual/en/features.commandline.webserver.php
Например, быстрая начальная подсказка может быть такой:
<?php
if ($_SERVER['REQUEST_URI']!='/') {
include($_SERVER['SCRIPT_FILENAME']);
exit();
}
?>
Не могли бы вы объяснить, как я могу применить это к сценарию, который я представил? Я плохо знаю языки программирования.
При запуске php -S 0.0.0.0:8000 file.php все запросы обрабатываются кодом из file.php; глядя на исходный пост, вы видите изменение URL-адреса, но исполняемый скрипт все еще file.php. Вы можете получить доступ к таким переменным, как REQUEST_URI из $_SERVER superglobal, поскольку его значение отражает текущее имя ресурса (например, путь к файлу в адресной строке из локальный: 8080...), чтобы добавить или включить код из другого файла.
Я имею в виду, что если я добавлю приведенный выше код в начало file.php, я смогу отправить форму в example.php.
Хорошо, спасибо, что сообщили мне. Я проверю это сегодня.
/>, а не\>.