php - 当 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"
}
主机名更改为??
对这个案子有什么想法吗?
解决方案
尝试执行:
exec("./run_ansible.sh");
并给出完整的路径,如:
exec("./var/www/html/run_ansible.sh");
并将您的文件编码设置为 utf-8
推荐阅读
- sequelize.js - 如何在 Sequelize 表中指定范围?
- angular - 更改租户时重新加载整个页面的原因是什么?
- oracle - 适用于 Visual Studio 2017 的 Oracle 开发人员工具 (ODT)
- git - Git:从目录中删除文件,但确保该文件的版本保留在 git 历史记录中
- javascript - Tempusdominus datetimepicker 打开方向
- apache-kafka - java KafkaConsumer 永远不会得到结果
- dart - Flutter - 来自 json api 的数据将列在下拉列表中
- python - WebDriverException:未处理的检查器错误,代码为“-3200”
- angular - 为未来执行创建一系列承诺
- angular - Angular 6 - 错误类型错误:“this.router 未定义”