首页 > 解决方案 > 当 PHP 执行 shell 以使用 2 字节字符主机名运行 Ansible 时输出错误

问题描述

我正在使用 PHP 在 Centos 7 上执行 Ansible 命令

这是 test.php 文件中的简单代码

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

和shell脚本

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

当我通过 URL ( http://url/test.php )在 Web 浏览器上运行 php 文件时,它失败了

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

主机名更改为??

对这个案子有什么想法吗?

标签: phpansiblesh

解决方案


尝试执行:

exec("./run_ansible.sh");

并给出完整的路径,如:

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

并将您的文件编码设置为 utf-8


推荐阅读