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

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

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

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

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

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"}

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

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

0

Решение

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

exec("./run_ansible.sh");

И дать полный путь, как:

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

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

0

Другие решения

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

У кого-нибудь есть идеи по этому делу?

0

По вопросам рекламы [email protected]