Ошибка вывода, когда PHP исполняет оболочку для запуска Ansible с 2-байтовыми символами имени хоста - PullRequest
0 голосов
/ 17 мая 2018

Я использую PHP для выполнения команды Ansible на Centos 7

Вот простой код в файле test.php

<code><?php
$command = "./run_ansible.sh";
$output = shell_exec($command);
echo "<pre>$output
"; ?>

и сценарий оболочки

ANSIBLE_DIR="/etc/ansible"
ANSIBLE_INVENTORY_FILE="${ANSIBLE_DIR}/inventories/production"
COMMAND="ansible all -i ${ANSIBLE_INVENTORY_FILE} -l 北京,广州 -m ping"
sudo ${COMMAND}

Когда я запускаю php файл на сервере, он работал

php test.php

广州 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}
北京 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}

Когда я запускаю php файл в веб-браузере через URL (http://url/test.php),, он не работает

?? | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}
?? | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}

Имя хоста изменено на ??

Есть идеи по этому делу?

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

Когда я использую команду «cat, echo» в оболочке, PHP может отображать эти имена хостов.Но если я использую команду «ansible», вывод в браузере будет неудачным (он отображает ??)

У кого-нибудь есть идеи для этого случая?

0 голосов
/ 17 мая 2018

Попробуйте с exec:

exec("./run_ansible.sh");

И укажите полный путь, как:

exec("./var/www/html/run_ansible.sh");

И установите кодировку файла в utf-8

...