【问题标题】:PHP exec operator doesn't execute specific commandPHP exec 运算符不执行特定命令
【发布时间】:2013-03-06 13:25:20
【问题描述】:

我的其中一行 shell 命令没有执行,尽管其他类似的行工作。我正在使用基于 Ubuntu 12.04 的操作系统的 linux 机器上运行。我也试过用exec,还是不行。

我实际上在某个时候有这个工作,在那里我遇到了挂起的问题(等待命令输出),这就是我将输出重定向到 /dev/null 的原因。因此,在开发中的某些地方发生了一些变化。我们确实创建了一个要安装的 debian 包,并且我已经运行了该安装包,所以我想可能是在覆盖文件时权限发生了变化,所以我向所有用户/组/所有者添加了读/写/执行,但这也不起作用.

代码在这里:

if(isset($_POST['activateXML']))
{
    if (videoConsistencyCheck())
    {
        `cp {$fileXML} /apps/video/xml.xml`;
        `sudo /apps/video/vsss restart >/dev/null 2>&1 &`;
        systemUnvalidate();
        header('Location: index.php?app='.$_GET['app']);
        die();
    }
}

我知道 if 语句的第一行会被执行。这行代码在实际终端中运行良好,所以这也不是问题。我做了很多谷歌搜索,我只能找到一个没有答案的问题,任何建议都会有所帮助。

编辑:所以看起来不起作用的实际上是按预期调用命令,但在 bash 脚本中我调用的启动-停止守护进程不起作用

编辑 2:我制作了一个测试 php 文件并从终端运行代码,通过在命令中添加 sudo 修复了 start-stop-daemon 错误,但它在我的代码中仍然不起作用。我在按下提交按钮时调用此代码。

【问题讨论】:

  • 正在运行的PHP用户是否对/apps/video/vsss有执行权限?
  • 如上所述,我执行了“sudo chmod a+rwx /apps/video/vsss”。您是否建议我仍然需要添加特定用户?如果是这样,我将如何确定 PHP 代码将使用的用户?似乎是这种情况,它只是没有执行权限
  • 没有运行的指标是什么? 正在发生什么
  • 运行脚本后,输出视频源的程序将以新设置重新启动,以便轻松告诉我在新设置中禁用视频输出。所以如果要执行,我就再也看不到视频了
  • 运行视频进程的用户是谁?我敢打赌它与运行命令的用户不同。

标签: php process permissions exec shell-exec


【解决方案1】:

使用附加参数,尤其是输出: 执行($命令,$输出); var_dump($输出); 以确定您的命令可能有什么问题。如果它不起作用,请向我们展示您使用 exec 的代码。

【讨论】:

  • 我试过了,当然没有重定向输出,输出变量为null。
  • 我最终不得不写入文件,因为代码只在提交按钮中执行,使得读取输出更加困难。但这实际上是输出。
【解决方案2】:

问题在于调用 vsss 脚本中只能以 root 身份运行的二进制文件。我们不想让任何人都可以访问该二进制文件。我们提出的解决方案涉及在 vsss 脚本上调用 chmod +s,该脚本允许用户和组 ID 的权限,但保留其所有者权限。然后,我们使用 NOPASSWD 参数将 PHP 用户(即 www-data)添加到 sudoers 文件中。在我的 PHP 代码中,我使用了以下行:

exec('sudo /apps/video/vsss restart >/dev/null 2>&1 &')

shell_exec()/backticks 不适用于此方法。

【讨论】:

    猜你喜欢
    • 2013-09-07
    • 2017-05-06
    • 1970-01-01
    • 2012-08-18
    • 2013-07-28
    • 1970-01-01
    • 2019-02-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多