【问题标题】:Any idea why I can execute command from Command Line but not From PHP exec()知道为什么我可以从命令行执行命令但不能从 PHP exec()
【发布时间】:2011-06-06 04:48:16
【问题描述】:

好的,

我进行了一些创造性的搜索,但有点遇到障碍。

我正在尝试使用 linux 程序“sox”。我试图从我的 PHP 脚本中调用它。如果我使用命令行,脚本就可以工作。但是,当我使用 PHP exec 时,它不起作用。

例子:

sox file1.mp3 file2.mp3 tempfile.mp3 -V3

(“V3”指定详细输出)

当以“用户 X”或 root 身份在命令行中执行时,我可以创建新文件。但是,当我执行命令时:

<?php
exec('sox file1.mp3 file2.mp3 tempfile.mp3  -V3', $output);
foreach($output as $line){
print $line;
}

它不会生成新文件。此外,应该返回命令结果的数组是空白的。

我用

做了一个简单的文字
exec(ls,$output);

我得到了根目录的内容。

我使用了 PHP 命令get_current_user(),它返回了作为网站根目录的所有者。

但是,当我使用 linux 命令whoami 时,我发现它将当前人视为“apache”。我需要授予 apache 使用该程序的权利吗?

我将继续在网上搜索并反复试验,以找出我做错了什么。任何帮助表示赞赏。

澄清

  • 我没有处于安全模式(我检查了 phpinfo() 页面")

【问题讨论】:

  • 好的,所以这里的大交易是 1)您需要指定 sox 的完整路径,而不仅仅是输入“sox”,并且 2)执行脚本的用户(apache)需要有权限输出文件夹。

标签: php linux permissions exec sox


【解决方案1】:

我确信 php 以运行 apache 的用户身份运行,而这通常是无人(无权创建目录的用户)。尝试在允许每个人编写的地方创建您的输出,并检查运行 apache 的用户。

【讨论】:

  • whoami 返回“apache” 最好的方法是什么,授予 apache 使用该程序的权利或使用 exec 命令以具有更多权限的用户身份进行身份验证?那就是如果可能的话......
  • 使用 apache 可以写入的输出目录。通常 webapps 包含一个 /cache/ 文件夹用于此类操作
  • 好的,所以我创建了一个名为“tempfiles”的新文件夹。我将输出路径指向这个以 apache 作为所有者的新文件夹。如果我从命令行运行该命令但没有从 php exec 运行该命令。
  • 看起来这实际上可能是解决方案....我在代码中有一些元素混淆了这个问题....
【解决方案2】:

通常这是一个路径问题。您尝试调用的应用程序可能不在 Web 服务器用户帐户的搜索路径中。我只使用完整路径从 PHP 调用应用程序。我将该路径存储在设置文件中,以便它适用于它所使用的任何系统。

【讨论】:

  • 所以这里的解决方法是在整个目录结构中定位程序的路径,然后调用它?但是“正常”命令行会查找程序的位置或以某种方式知道?如果我的问题听起来很愚蠢,请原谅我。我学习 linux 是出于必要。
  • 看起来可以用“which”命令完成,我试试看
  • Linux 上的每个 shell 帐户都有一个典型命令行应用程序的搜索路径(例如 /usr/bin)。 Web 服务器帐户的搜索路径通常为空。我不会让 PHP 找到应用程序,而是在某处硬编码路径(例如 exec('/usr/local/sox/bin/sox file1... )。对于我的 Web 应用程序,我使用每个服务器的设置文件,每个都会在该特定系统上拥有通往 sox 的路径。
  • 好的,我找到了完整路径,但并没有解决问题。我确实将命令复制到带有完整路径的命令行中,并且确实有效。看来,我对 linux 有所了解,但仅此一项并不能解决问题!
  • 那么在您看来,我是否听从了您的建议,而这不是问题所在?
【解决方案3】:

检查您当前是否在safe_mode中运行PHP

【讨论】:

  • 我不在安全模式下:“safe_mode - Off - Off”
猜你喜欢
  • 2013-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-06
  • 1970-01-01
  • 2021-07-21
  • 2022-01-14
  • 2010-10-21
相关资源
最近更新 更多