Передать данные формы как переменные команде docker

Я пытаюсь запустить ansible docker container через веб-страницу, но не нашел решения, только частично.

У меня есть index.html

<html>
<body>

<form action = "adduser.php" method = "get">
Server: <input type = "text" value = "<?php echo $name?>" name = "name"><br>
<input type = "submit">
</form>

</body>
</html>

adduser.php

<?php
  chdir("aatool"); 
  echo getcwd();
$hosts = $_POST["name"];
echo "$hosts";
// $hosts = escapeshellarg($hosts);
//echo ".escapeshellarg($hosts)";
$output = shell_exec('sudo docker run -i --network=host centos7-ansible ansible-playbook --private-key=ky.pem --extra-vars admin_password=test -e hosts = ".escapeshellarg($hosts)." chpass.yml');
  echo "<pre>$output</pre>";
?>

Вывод веб-страницы:

/var/www/html/aatool PLAY RECAP *********************************************************************

Журналы контейнера Docker:

PLAY RECAP *********************************************************************

Журнал ошибок Apache:

[:error] [pid 40367] [client x.x.x.x:61812] PHP Notice:  Undefined index: name in /var/www/html/adduser.php on line 4, referer: http://x.x.x.x/

Если я передаю значение hosts напрямую, например hosts=all, все работает отлично, но если я попытаюсь получить значение из php-формы, оно не хочет работать. Я пробовал все, что мог найти, и этот код дал мне лучший результат, но все еще не работал. Я надеюсь, что я найду здесь помощь

Спасибо.

Стоит ли изучать 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
0
281
1

Ответы 1

Ваша ФОРМА отправляется методом GET, но ваш код проверяет переменную $_POST. Попробуйте установить hosts из $_GET или изменить FORM на POST.

Спасибо, Мэтью, но это все еще не решает мою проблему. Я получаю тот же вывод веб-страницы, error_log ничего не показывает, журналы контейнеров докеров имеют тот же вывод.

boncalo mihai 27.01.2019 13:15

docker inspect 7d8845d1449e "Cmd": [ "ansible-playbook", "--private-key=ky.pem", "--extra-vars", "admin_password=test", "-e", "hosts=.escapeshellarg ().", "chpass.yml" Невозможно добавить весь вывод из-за ограничения количества символов

boncalo mihai 27.01.2019 13:26

Вы можете попробовать изменить -e hosts = ".escapeshellarg($hosts)." на -e hosts='.escapeshellarg($host).' - есть сочетание одинарных/двойных кавычек, означающих, что строка escapeshellarg отправляется в докер

Matthew Page 27.01.2019 13:35

Я работал с одинарными кавычками... и хотел попробовать, но был уверен, что это бессмысленно :) Спасибо.

boncalo mihai 27.01.2019 18:48

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