【问题标题】:Cant get php exec to work无法让 php exec 工作
【发布时间】:2012-02-01 11:29:15
【问题描述】:

我已经为此奋斗了几个小时,但我似乎无法解决。 尝试了 exec()、shell_exec() 和 system()。没有任何效果。 我有这个:

exec("/usr/bin/php /var/www/vhosts/domain.com/httpdocs/shell/send.php >> /var/www/vhosts/domain.com/httpdocs/shell/paging.log &");

send.php 有:

echo 'works';

但日志中没有显示任何内容。我已经用谷歌搜索并阅读了这里的内容,但找不到任何帮助。

我正在运行 php v.5.3.8。 安全模式已开启 我很确定那是 php 的路径,但真的不知道如何找到它,所以我继续 phpinfo()。

exec('whoami');什么也没做。它应该显示在浏览器中吗?或者给你发邮件? 有什么想法吗?

【问题讨论】:

  • 尝试 /usr/bin/php -f /path/to/file.php(-f 标志)
  • 什么都没有。只是 ssh'd 到服务器,这是 php 的正确路径。也许与安全模式有关?
  • 安全模式可能会影响您的通话:php.net/manual/en/features.safe-mode.functions.php

标签: php exec


【解决方案1】:

根据exec函数的PHP手册:

启用安全模式后,您只能执行 安全模式执行目录。出于实际原因,目前不允许 在可执行文件的路径中包含 .. 组件。

查看http://php.net/manual/en/ini.sect.safe-mode.php#ini.safe-mode-exec-dir

另外,请注意,Web 服务器用户必须具有写入日志文件的权限。

编辑:要关闭安全模式,不仅要检查 php.ini 文件,还要检查 Web 服务器中的虚拟主机特定配置,无论是 Apache、NginX 还是其他。如果您使用 Plesk,请在 vhosts 中查找 httpd.include,并确保也将 safe_mode 设置为 off。

【讨论】:

  • 更新了我的答案。我已经阅读了 exec、shell_exec 和 system 的整个页面。没有任何效果。
  • 所以,首先,使用 SSH 连接并运行命令 /usr/bin/php /var/www/vhosts/domain.com/httpdocs/shell/send.php 并告诉我们输出。
  • 还有两个问题要问您:1) 安全模式是打开还是关闭? 2) send.php 是否有 PHP 开始和结束标签?我的意思是<?php?>
  • 另外,您应该尝试<?php echo exec('whoami'); ?> 只是为了查看一个简单的“exec”功能。
  • L.布鲁尼读了 OP。回显 whoami 从浏览器中什么也不做。从命令行中工作。输出:指令 'safe_mode' 在 PHP 5.3 及更高版本中已弃用 第 1 行未知。留下日志部分打印 'works'。并将日志部分添加到日志文件中就好了。
【解决方案2】:
> The last line from the result of the command. If you need to execute 
> a command and have all the data from the command passed directly back
> without any interference, use the passthru() function. To get the output
> of the executed command, be sure to set and use the output parameter.

我不是在寻找输出,exec() 的最后两个参数是可选的。我的情况是我真正需要的是能够在桌面上打开一个文件夹。这种确切的语法在 MAMP_PRO_1.9.6 中运行良好,但在 MAMP_PRO_2.0.5 中不再适用(已损坏)

<?php
    exec("open /path/to/any/folder");   //  BROKEN in Mamp Pro 2.0.5
?>

【讨论】:

    【解决方案3】:

    要得到输出,你需要传递第二个参数,或者你可以通过echo'ing得到最后一行输出。

    来自 PHP 手册:

    string exec ( string $command [, array &amp;$output [, int &amp;$return_var ]] )

    返回值:

    命令结果的最后一行。如果您需要执行命令并将命令中的所有数据直接传回而不受任何干扰,请使用 passthru() 函数。 要获取执行命令的输出,请务必设置并使用输出参数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-06
      • 2011-04-26
      • 2015-11-24
      • 1970-01-01
      相关资源
      最近更新 更多