从Web应用程序控制器内部调用.phar可执行文件

时间:2012-12-07 01:37:38

标签: php composer-php webhooks

我需要从网络控制器运行composer.phar update

我可以用这种方式运行各种常规命令(lscp等),但是当我调用phar文件时,我得到空输出。

我的代码如下:

class Maintenance_Controller
{
    public function do_maintenance()
    {
        echo exec("/usr/bin/env php composer.phar", $out, $ret);
        var_dump($out); // outputs -> array()
        var_dump($ret); // outputs -> int(127)
    }
}

127表示路径不好,但我确定我在正确的目录中。

此外,这在使用php_cli包装器时也有效,所以它可能与www-data用户有关吗? chmod 777无济于事,我讨厌这样做。

我还使用了passthru()system()和语法语法。我无法理解这不起作用的原因。我似乎无法通过exec()代码之外的127来电询问stderr或stdout。

明显的问题:

我做错了什么?

更好的问题:

是否有更好的方法可以在脚本中查询和执行.phar个文件?

1 个答案:

答案 0 :(得分:3)

<强>更新

来自this question

  

当您的PATH系统变量中找不到给定命令且它不是内置shell命令时,/ bin / sh返回值127。

尝试使用exec('php composer.phar', $out, $ret);并查看是否有效。您可能还需要使用php的完整路径,如果它位于您可能从which php获得的非标准位置。


我不确定你为什么在这里使用passthru。我会使用exec来更好地处理。 我在此处使用exec而不是passthru

class Maintenance_Controller
{

    public function do_maintenance()
    {
        exec("composer.phar update", $out, $ret);
        if(!$ret) {
            // handle success
        } else {
           // handle error
        }

    }
}

这样你就可以在$out中按行输出所有输出以及shell返回值(如果没有则为0,否则为> 0)。如果你想真正想象,你可以循环$out并扫描错误,然后构建和抛出异常。