PHP警告:无法加载动态库

6

好的,我在我的Mac OS X Apache 2服务器上成功安装了PHP。但是我遇到的问题是它似乎找不到允许我连接到SQLite数据库的扩展。

extension = php_sqlite.dll
extension = php_pdo_sqlite.dll
extension = php_sqlite3.dll

现在我取消了这些扩展名的注释,导致出现了这个错误。
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php/extensions/no-debug-non-zts-20090626/php_sqlite3.dll' - dlopen(/usr/lib/php/extensions/no-debug-non-zts-20090626/php_sqlite3.dll, 9): image not found in Unknown on line 0

这三个问题都是同样的错误。
我在互联网上的不同地方读到,可能是因为它们没有安装在我的Mac上,但我找不到PHP目录或任何它们可能存在的地方!
我对此非常陌生,所以需要帮助。


1
.dll文件是为Windows准备的。在Mac上,它可能是其他什么(.so?) - Marc B
1
为什么Mac版本的php.ini文件中会带有.dll文件?这真的没有意义。我会尝试将其更改为.so文件。 - StuStirling
1
因为 PHP 是跨平台的,并且包含了大多数平台的示例? - Marc B
好的,显然即使使用@Francois以下的方法将它们安装到正确的位置,它仍然找不到它们。仍然出现与上述相同的错误!请帮忙。 - StuStirling
我不确定对你是否适用,但对于我来说,pdo_sqlite和pdo_mysql已经以某种方式启用了。它警告我它们被重复启用,所以我只是将它们保留未被注释。 - Anon343224user
3个回答

13

你启用的DLL扩展实际上是针对Windows的。在Mac和其他*nix平台上,它们实际上是SO文件。

我也在使用Mac,看起来SQLite模块已经加载了。你应该能够在你的php.ini文件中注释掉那些行,重新启动Apache并且无需做任何操作就可以使用SQLite。据我所知,SQLite模块已经包含了很长时间。

如果它真的没有包含在内,你将需要从源代码编译这些模块。这需要你安装Apple Developer Tools

从头开始编译(从命令行):

  1. 下载PHP源代码。您需要下载与您系统上已安装的版本相匹配的版本。要找出您正在使用的版本,请在命令行中键入php -v
  2. 使用tar -zxvf命令解压您下载的存档文件,然后输入文件名。
  3. 键入cd php-5.3.x/ext/sqlite3/(其中"5.3.x"应替换为您的版本号,"sqlite3"可以是您要从上面的列表中安装的任何模块,减去"php_"前缀)。
  4. 键入phpize
  5. 键入./configure
  6. 键入make
  7. 键入sudo make install
  8. extension=sqlite3.so添加到您的php.ini文件中(如果编译其他扩展,请确保用其他扩展的名称替换sqlite3.so)。

最后,重新启动Apache,您就完成了。


好的,我找到了所有的扩展程序所在位置,只有一个在那里。按照你说的做了,但在输入phpize时卡住了。我得到了这个提示..... 确保您在模块的顶级源目录中运行'usr/bin/phpize' - StuStirling
找到问题了,它正在寻找一个名为config.m4的文件,但我只有config0.m4? - StuStirling
@Disco S2 - 我已经完成了我上面发布的内容,但是针对不带有 OS X PHP 的进程分叉(pcntl)。我不使用 SQLite,所以我不确定配置文件。我刚刚检查了我的安装,并发现它已经安装并分享了我过去使用的步骤。 - Francois Deschenes
你的方法有效,将它们安装到正确的位置,因为之前我只有一个扩展程序在那里。然而,它仍然显示找不到它们。感谢你的帮助。 - StuStirling
1
对于所有遇到这个问题的人,这是我解决的方法。@amphetmachine是正确的,.dll是为Windows准备的,所以我们要寻找.so扩展名。上面的解决方案非常适合我们需要做的事情。按照答案操作即可安装。但是,当您这样做后,您将需要返回到php.ini文件中并注释掉该扩展名,因为错误文件中会显示类似“此扩展已安装”的内容。 - StuStirling
显示剩余2条评论

0
尝试删除然后重新安装软件包:
brew rm mcrypt
brew install mcrypt

0

打开 php.ini 文件。查找定义扩展位置的行。在我的情况下(Windows 机器),它是这样的:

extension_dir = "C:\xampp\php\ext"

这将为您提供所有扩展的位置。打开它并检查您的 SQLite 扩展是否确实存在。

另外,请确保您的扩展实际上是针对 Mac 计算机的。它们的文件名扩展名应该是 "dylib" 或者也许是 "so"(不确定 - 我没有 Mac),而 "dll" 是 Windows 特定的动态库文件名扩展名(据我所知)。


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