首页 > 解决方案 > 使用 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;

?>

标签: phpajaxubuntushsudo

解决方案


这很可能是因为当通过 Web 服务器调用该命令时,与您直接在命令行上调用它相比,该命令将以另一个用户身份运行。

您使用的是哪个网络服务器?例如,如果您正在运行apache,您可以看到/更改用户 PHP 在User指令中由 web 服务器运行;在 Ubuntu 下这个www-data.

另一个原因可能是sudo要求输入 PHP 无法提供的密码。此处注意:在终端上运行时可能会缓存该终端会话sudo的授权。因此,也许还可以在新的终端会话中测试手动执行 PHP 脚本。

在这两种情况下,您可能需要更新您的/etc/sudoers以允许非交互式执行sudo.

但请注意:这很危险!

sudo通过允许从 Web 以 root 权限执行命令,从 Web 服务器调用外部命令很容易成为巨大的安全风险。仅当您真的知道自己在做什么时才继续执行此操作-尤其是永远不要相信用户输入!


推荐阅读