如何在运行时加载PHP扩展

3

我正在尝试在运行时加载一个PHP扩展。由于使用dl()函数不被推荐并已从PHP中删除,因此我正在使用PHP扩展指令,但它也无法正常工作。

ini_set('extension','php_gmp.dll');

if(extension_loaded( 'gmp' ))
    echo 'GMP is Loaded';

能做到吗?

我想这么做的原因是我的应用程序需要使用gmp,并且希望即使在Web服务器上没有运行gmp时也能加载gmp。

谢谢。


2
如果您需要使用一个扩展但它没有被加载,那么您的应用程序与之无关。您的环境不符合应用程序的要求,因此最好的选择是显示错误并结束执行。 - Alma Do
我认为你不能在脚本中加载扩展,必须在php.ini中设置,然后需要重新启动Web服务器才能反映更改。 - RaggaMuffin-420
@AlmaDo 不是这样的。没有GMP,我的应用程序也能很好地运行,但我想在运行时运行它。 - user3677687
如果你“需要加载GMP才能使其工作”,它是如何工作的? - Alma Do
@RaggaMuffin-420 我读了关于扩展指令的内容,但也不起作用。 - user3677687
@AlmaDo需要GMP但不依赖它。只有应用程序的某些部分需要GMP,但我会检查是否已加载GMP。如果没有加载,我会以另一种方式处理它。 - user3677687
3个回答

2

这里似乎没有选项。谢谢。 - user3677687

0

dl()是唯一的-理论上的-实现方式,ini_set()不起作用,因为extension指令只会在PHP启动时处理。然而,在运行时加载扩展可以被认为是不良做法,因为这可能被用来规避管理限制。

此外,这只是一个理论选项,因为大多数共享Web主机都会禁用函数dl(),并且它在PHP>5.3和大多数SAPI中根本不可用,因为存在一些稳定性问题)

启用GMP支持的唯一方法是购买一个Web托管计划,您可以在其中拥有root权限并安装所需的软件,但您可能也可以使用BC math


这里似乎没有选项。谢谢大家。 - user3677687
1
@User1234 也许你可以使用bc math?http://php.net/manual/de/book.bc.php - hek2mgl
@hek2mgl 是的,但我认为GMP更好,而且Math也可能被禁用。 - user3677687
1
很可能已经安装了 BC math,因为它是大多数发行版(即使在Windows或共享虚拟主机上)中PHP核心的一部分。我认为没有“更好”的选择,只要BC在您的计算机上可用,您需要检查它是否适用于您的应用程序。其中一个最大的优点是平台兼容性,因为它可以在大多数PHP安装中使用。 - hek2mgl
@hek2mgl 非常感谢。我想我会使用bc Math。 - user3677687
显示剩余3条评论

0

有一个名为dl的函数,它在PHP 5.3之前得到支持。请注意,此函数已从大多数SAPI中删除,并且已从PHP-FPM中删除,自PHP 7.0.0起。

dl是一个“运行时加载PHP扩展”的函数。

  • 当PHP使用ZTS支持构建时,不支持dl()

  • 在Unix平台上,dl()区分大小写。

  • 当PHP以安全模式运行时,此函数被禁用。

还有一个php变量可以在ini文件中设置,需要访问配置。 扩展:在PHP启动时动态加载的可加载扩展。

一种选择是将您的代码打包为PEAR并添加对所需扩展的依赖项。然后,如果缺少扩展,代码将警告您或拒绝安装。

*注意:不要搜索任何与ini_set相关的方法,因为它从未支持在运行时加载扩展。

实现您想要的最佳实践和唯一方法是首先为您的php脚本提供环境。

祝好运 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接