Почему в этом случае не работает встроенный в php веб-сервер?

Когда я пытаюсь заставить этот код работать на встроенном php-сервере, он не работает.

Я пытаюсь сделать следующее:

  1. Запустите php -S 0.0.0.0:8000 file.php эту команду в cmd. Далее я печатаю http://localhost:8000 в браузере.
  2. После того, как я нажму кнопку, которая должна привести меня на другой сайт, указанный в 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>
Примечание: Вы заканчиваете самозакрывающиеся HTML-теги знаком />, а не \>.
M. Eriksson 18.03.2019 23:21

Внутренний сервер PHP всегда передает все запросы к файлу, который вы определяете при его запуске. Поэтому, когда URL изменится на example.php, он все равно будет идти на file.php. Ваше приложение должно проверить запрошенный URL-адрес и выполнить правильное действие в зависимости от запрошенного URI, как и большинство фреймворков и CMS.

M. Eriksson 18.03.2019 23:31

Итак, как это может работать из командной строки? Это возможно? (в целях тестирования не то, что требует слишком много усилий) И как я могу определить этот файл?

Saian 18.03.2019 23:36

Вы можете переименовать свой file.php в index.php и вообще не определять файл при запуске сервера. Тогда это должно работать. Из руководства: «Если файл PHP передается в командной строке при запуске веб-сервера, он рассматривается как сценарий «маршрутизатора». Сценарий запускается в начале каждого HTTP-запроса. Если этот сценарий возвращает FALSE, то запрошенный ресурс возвращается как есть. В противном случае выходные данные скрипта возвращаются в браузер».

M. Eriksson 18.03.2019 23:37

Сейчас проверю, большое спасибо за ответы :) Не за что.

Saian 18.03.2019 23:40

Хорошо, я переименовал файл, и на самом деле ничего не изменилось :/

Saian 18.03.2019 23:42

Это странно. Я попробовал это, и это сработало здесь. Я переименовал file.php в index.php, затем запустил сервер с помощью php -S 0.0.0.0:8000 (без имени файла)

M. Eriksson 18.03.2019 23:45

Хорошо, это работает без указания имени файла. :)

Saian 18.03.2019 23:48

Это из-за первого предложения, которое я разместил в руководстве: «Если файл PHP передается в командной строке при запуске веб-сервера, он обрабатывается как сценарий «маршрутизатора»..

M. Eriksson 18.03.2019 23:49

Да, я думаю, мне следует углубиться в руководство, но еще раз спасибо :) Вы молодец!

Saian 18.03.2019 23:51

Я опубликую правильный ответ, чтобы вы могли закрыть вопрос, приняв его.

M. Eriksson 18.03.2019 23:53
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
11
1 924
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Как говорит руководство: "Если файл 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();
}
?>

Не могли бы вы объяснить, как я могу применить это к сценарию, который я представил? Я плохо знаю языки программирования.

Saian 19.03.2019 00:06

При запуске php -S 0.0.0.0:8000 file.php все запросы обрабатываются кодом из file.php; глядя на исходный пост, вы видите изменение URL-адреса, но исполняемый скрипт все еще file.php. Вы можете получить доступ к таким переменным, как REQUEST_URI из $_SERVER superglobal, поскольку его значение отражает текущее имя ресурса (например, путь к файлу в адресной строке из локальный: 8080...), чтобы добавить или включить код из другого файла.

alessio 19.03.2019 00:17

Я имею в виду, что если я добавлю приведенный выше код в начало file.php, я смогу отправить форму в example.php.

alessio 19.03.2019 00:22

Хорошо, спасибо, что сообщили мне. Я проверю это сегодня.

Saian 19.03.2019 11:34

Другие вопросы по теме