php - 使用 ajax 调用的 shell_exec 在 inux 中不起作用
问题描述
我有一个使用 shell_exec 调用 shell 脚本的 php 脚本,我正在使用 ajax 调用 php 脚本,
在 mac os 中,它确实运行没有任何问题,但是当我尝试在我的 ubuntu vm 中运行它时,它在从 ajax 调用时不会执行 shell_exec 命令,但是如果我从 unix 控制台运行使用
php script.php
它确实正常运行 shell_exec。
以前有人遇到过这个问题吗?
php代码是这样的
<?php
$output = shell_exec('sudo sh /var/www/html/SIRSProject/WebApp/php/teste.sh');
echo $output;
?>
解决方案
这很可能是因为当通过 Web 服务器调用该命令时,与您直接在命令行上调用它相比,该命令将以另一个用户身份运行。
您使用的是哪个网络服务器?例如,如果您正在运行apache
,您可以看到/更改用户 PHP 在User
指令中由 web 服务器运行;在 Ubuntu 下这个www-data
.
另一个原因可能是sudo
要求输入 PHP 无法提供的密码。此处注意:在终端上运行时可能会缓存该终端会话sudo
的授权。因此,也许还可以在新的终端会话中测试手动执行 PHP 脚本。
在这两种情况下,您可能需要更新您的/etc/sudoers
以允许非交互式执行sudo
.
但请注意:这很危险!
sudo
通过允许从 Web 以 root 权限执行命令,从 Web 服务器调用外部命令很容易成为巨大的安全风险。仅当您真的知道自己在做什么时才继续执行此操作-尤其是永远不要相信用户输入!
推荐阅读
- google-maps - 使用 Flutter 的反应式/动态标记
- php - 如何允许使用 chrome 在我的本地 Apache Web 服务器中呈现 CSS 内容?
- c - 为什么 malloc 钩子对 pthread 不安全?
- python - 尝试使用 BeautifulSoup 获取元数据时出现意外结果
- flutter - 将模型中的列表保存为 Firestore 中的集合
- r - 在 Mac OSX 上运行的 R Studio 中安装 rJava 和 xlsx
- java - 使用 HP LeanFT 与已打开的浏览器交互
- pcregrep - 如何用 pcregrep 匹配 n 次或更少的东西?
- dsl - 如果我在不同的功能中多次使用此功能,那么 callonce 功能是否会再次执行该功能?
- ios - 暂停时调用 UIViewPropertyAnimator 完成