【问题标题】:How to use PECL extension from inside of framework如何从框架内部使用 PECL 扩展
【发布时间】:2016-11-20 02:16:56
【问题描述】:

我正在使用 PECL 扩展 trader

它可以在 ./src/MyBundle/Command/MyCommand.php 中运行,无需任何安装或包含。

function calcByCode()
    \trader_ma($array, 5, TRADER_MA_TYPE_EMA);
}

然而在控制器内部

./src/MyBundle/Controller/MyController.php

public function indexAction()
{
    \trader_ma($array, 5, TRADER_MA_TYPE_EMA); 
    //(or trader_ma($array, 5, TRADER_MA_TYPE_EMA);)

    return $this->render('AcmeTopBundle:Default:index.html.twig');
}

返回这样的错误

致命错误:调用未定义函数 TopBundle\MyController\trader_ma()

如何在 Symfony2 框架的控制器中使用 PECL 扩展??

【问题讨论】:

  • 把填写代码贴在你打电话的地方trader_ma
  • 我改了文章,我只是用trader_ma很简单。

标签: php symfony pear pecl


【解决方案1】:

这主要是扩展程序未正确安装的情况。要知道扩展程序是否安装正确,请在 cli 和 web ( cgi / fpm ) 中使用 phpinfo

有可能该扩展仅在 PHP CLI 的 php.ini 中启用,而不是在 fpm/cgi(Web 服务器)中启用。所以请确保在适当的 php.ini 文件中启用交易者模块。

【讨论】:

  • 我比较了来自 cgi 和命令行的两个 phpini()。我发现在 phpinfo 命令行中有一个名为 trader 的表。 trader Trader Technical Analysis Library Support => enabled Version => 0.4.0 TA-Lib version => 0.4.0 (Nov 18 2016 11:24:08) 但是cgi的phpinfo中没有关于交易者的表格。但是我已经确认我在两个环境中都使用了相同的 php.ini /usr/local/php5/lib/php.ini。我该如何解决这个问题??
  • 所以现在,我想我可以总结一下我的问题了,PECL 扩展没有在 cgi 上启用
  • 啊,,,,,,我已经重启了apache,发现它可以工作了。非常感谢Vamsi。
【解决方案2】:

它似乎在为你的类寻找命名空间中的函数。由于它在普通函数中工作,这似乎证实了这一点。

未定义函数 TopBundle\MyController\trader_ma()

尝试告诉它在命名空间根目录中查找

public function indexAction()
{
    \trader_ma($array, 5, TRADER_MA_TYPE_EMA);
    return $this->render('AcmeTopBundle:Default:index.html.twig');
}

【讨论】:

  • 我已经尝试过\trader_ma,但它不起作用。像 \DataTime 这样的一些类就像你说的那样工作得很好。但是在这种情况下,不是。
  • 错误信息是这样的Attempted to call function "trader_ma" from the global namespace.
  • 这个问题我已经解决了,非常感谢@Machavity!你的回答对我来说也是一个很好的提示。
猜你喜欢
  • 2020-12-27
  • 2020-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多