我正在尝试在运行时加载一个PHP扩展。由于使用dl()函数不被推荐并已从PHP中删除,因此我正在使用PHP扩展指令,但它也无法正常工作。
ini_set('extension','php_gmp.dll');
if(extension_loaded( 'gmp' ))
echo 'GMP is Loaded';
能做到吗?
我想这么做的原因是我的应用程序需要使用gmp,并且希望即使在Web服务器上没有运行gmp时也能加载gmp。
谢谢。
我正在尝试在运行时加载一个PHP扩展。由于使用dl()函数不被推荐并已从PHP中删除,因此我正在使用PHP扩展指令,但它也无法正常工作。
ini_set('extension','php_gmp.dll');
if(extension_loaded( 'gmp' ))
echo 'GMP is Loaded';
能做到吗?
我想这么做的原因是我的应用程序需要使用gmp,并且希望即使在Web服务器上没有运行gmp时也能加载gmp。
谢谢。
dl()
是唯一的-理论上的-实现方式,ini_set()
不起作用,因为extension
指令只会在PHP启动时处理。然而,在运行时加载扩展可以被认为是不良做法,因为这可能被用来规避管理限制。
此外,这只是一个理论选项,因为大多数共享Web主机都会禁用函数dl()
,并且它在PHP>5.3和大多数SAPI中根本不可用,因为存在一些稳定性问题)。
启用GMP支持的唯一方法是购买一个Web托管计划,您可以在其中拥有root
权限并安装所需的软件,但您可能也可以使用BC math
?
BC math
,因为它是大多数发行版(即使在Windows或共享虚拟主机上)中PHP核心的一部分。我认为没有“更好”的选择,只要BC在您的计算机上可用,您需要检查它是否适用于您的应用程序。其中一个最大的优点是平台兼容性,因为它可以在大多数PHP安装中使用。 - hek2mgl有一个名为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脚本提供环境。
祝好运 :)