为啥 Windows 上的 PHP 看不到扩展 php_intl.dll,即使它存在?

Posted

技术标签:

【中文标题】为啥 Windows 上的 PHP 看不到扩展 php_intl.dll,即使它存在?【英文标题】:Why can't PHP on Windows see extension php_intl.dll even though it exists?为什么 Windows 上的 PHP 看不到扩展 php_intl.dll,即使它存在? 【发布时间】:2013-08-01 08:31:44 【问题描述】:

我一直在尝试让 intl 扩展在我的测试工作站(php 5.5.1、Apache 2.2.4、Windows 7 32 位)上运行。似乎无论我尝试什么都无法启动并运行它。

我在 php.ini 中取消了“extension=php_intl.dll”行的注释。 我已验证 extension_dir 指令指向正确的目录 (c:\wamp\php5.5\ext)。 我已验证 php_intl.dll 位于 c:\wamp\php5.5\ext。 我已验证所有 icu*.dll 文件都存在于 php 根目录 (c:\wamp\php5.5) 中。 我已验证 c:\wamp\php5.5 在我的 PATH 中。 是的,我正在编辑的 php.ini 副本是正确的,它由 httpd.conf 中的 PHPIniDir 指令指定。

我检查了 Apache 错误日志,每次重新启动 Apache 时都发现了这一行:

PHP 警告:PHP 启动:无法加载动态库 'c:\wamp\php5.5\ext\php_intl.dll' - 找不到指定的模块。\r\n 在第 0 行的未知中

我再说一遍,但是 c:\wamp\php5.5\ext\php_intl.dll 确实存在!

我很想尝试指向 Windows 资源管理器并对我的计算机大喊:“看!臭文件就在那儿!”知道为什么我可以看到文件而 PHP 看不到,即使我们显然在同一个目录中查找?还是发生了我错过的其他事情?

【问题讨论】:

那个是和PHP匹配的版本DLL吗? 是的,它的版本是 5.5.1。 【参考方案1】:

确保 Apache 可以从 PHP 基本目录中找到并加载 icu*.dll 文件。

快速、简单的解决方案是将这些 dll 复制到 Apache bin 目录。

【讨论】:

这对我有用!!!。只需将所有 icu*.dll 复制到 apache bin 文件夹即可。将 Wamp 服务器与 apache 2.4.4、php 5.4.16 一起使用 我用手动安装 Apache+PHP 对此进行了测试,它成功了!我一看到你是对的,就从 Apache24/bin 中删除了文件,所以我预计 intl 不会再次被识别但它仍然有效,我想知道为什么......知道真正的答案会很有趣并让 Apache 识别那些 icu*.dll 文件而不复制它们。有人知道怎么做吗?谢谢 在 WAMP 中为我工作,[wamp 的路径]/wamp/bin/php/php[版本号]/ - 将所有 icu*.dll 文件复制到 - [wamp 的路径]/wamp/ bin/apache/apache[版本号]/bin/ 谢谢! 也曾在 wamp 工作过。非常感谢【参考方案2】:

尽管 SeventyFourLaboratories 的解决方案简单且有效,但有一个解决方案不需要您修改 Apache 或 PHP 发行版(有时,您不允许在生产服务器中更改它们)。

您说您已验证 C:\wamp\php5.5 在您的 PATH 中。 Windows 有两种环境变量:用户变量和系统变量。

我尝试在我的用户变量PATH 中设置C:\wamp\php5.5,但它不起作用。但是,将它设置在 system 变量 PATH 中可以使其工作。因此,您应该确认您使用PATH 系统变量来配置Apache,而不是使用同名的用户变量。

【讨论】:

添加 PHP 安装的根目录为我解决了这个问题。无需移动 .dll 文件。【参考方案3】:

完整的解决方法是更改​​ C:\wamp\scripts\config.inc.php 如下:

找到该文件的这一部分

$phpDllToCopy = array (
'fdftk.dll',
'fribidi.dll',
'libeay32.dll',
'libmhash.dll',
'libmysql.dll',
'msql.dll',
'libmysqli.dll',
'ntwdblib.dll',
'php5activescript.dll',
'php5isapi.dll',
'php5nsapi.dll',
'ssleay32.dll',
'yaz.dll',
'libmcrypt.dll',
'php5ts.dll',
'php4ts.dll');

然后改成

$phpDllToCopy = array (
'fdftk.dll',
'fribidi.dll',
'icudt51.dll', // - Additions to avoid unknown error PHP 5.5.5
'icuin51.dll',
'icuio51.dll',
'icule51.dll',
'iculx51.dll',
'icutest51.dll',
'icutu51.dll',
'icuuc51.dll',
'icudt50.dll', // - Additions to avoid unknown error PHP 5.5
'icuin50.dll',
'icuio50.dll',
'icule50.dll',
'iculx50.dll',
'icutest50.dll',
'icutu50.dll',
'icuuc50.dll',
'icudt49.dll', // - Additions to avoid unknown error PHP 5.3/5.4
'icuin49.dll',
'icuio49.dll',
'icule49.dll',
'iculx49.dll',
'icutest49.dll',
'icutu49.dll',
'icuuc49.dll',
'libeay32.dll',
'libmhash.dll',
'libmysql.dll',
'libsasl.dll', // - Additions to avoid unknown error
'msql.dll',
'libmysqli.dll',
'ntwdblib.dll',
'php5activescript.dll',
'php5isapi.dll',
'php5nsapi.dll',
'ssleay32.dll',
'yaz.dll',
'libmcrypt.dll',
'php5ts.dll',
'php4ts.dll',
);

【讨论】:

config.inc.php 现在有一个数组 - 添加四个 icu 的数量,在我的情况下为 61。但遗憾的是仍然无法正常工作,所以我缺少其他东西。 //dll 来创建从 php 到 apache/bin 的符号链接 // // ICU 的版本是 38, 40, 42, 44, 46, 48 到 57 $icu = array( 'number' => array('57', '56'、'55'、'54'、'53'、'52'、'51'、'50'、'49'、'48'、'46'、'44'、'42'、'40' ', '38'), 'name' => 数组('icudt', 'icuin', 'icuio', 'icule', 'iculx', 'icutest', 'icutu', 'icuuc'), ); 对于 php 2.7.8,现在在 C:\wamp\scripts\config.inc.php 的第 131 行周围的代码数组中添加“62”,然后退出 WAMP 并重新启动【参考方案4】:

如何将您的 PHP.exe 位置添加到 PATH。

(Windows 7 图形用户界面)

对于“环境变量:系统变量”的管理员访问权限,请按照此处的说明进行操作: https://kb.wisc.edu/cae/page.php?id=24500

在“环境变量:系统变量”中,编辑“路径”变量并在现有字符串(请勿删除)前面加上您的位置。例如:C:\wamp\bin\php\php5.5.12;

为我工作。

【讨论】:

【参考方案5】:

我遇到了同样的问题,在解决这个问题将近 5 个小时后,我终于解决了。我必须做出两个主要的改变。

1) 当我下载我尝试使用的扩展时,除了 .dll 文件之外,它还附带了许多其他文件 - 其中大多数是 .pdb。我将它们全部移到了包含 .dll 文件的 ext 文件夹中。

2) smaines at alaya dot com 作为评论提供的答案here 给了我需要做的第二件事 - 将 ext 文件夹的路径添加到 windows $PATH 变量. 有很多方法可以做到这一点,这里是一种:

转到我的电脑 右键单击并选择属性 点击左侧的“高级系统设置” 点击顶部的“高级”标签 点击“环境变量”按钮 在变量列表中搜索“Path”变量,选择它 Click the 'Edit...' button (when the 'Path' variable is selected) 这将打开另一个带有两个输入字段的对话框。最下面的是变量,选中它。 在末尾附加一个分号,然后是路径,在这种情况下,您将键入 ';C:\wamp\php5.5\ext'(分号只是为了将其与之前的路径分开 在出现的所有对话框中单击“确定”以关闭它们

进行上述更改后,您需要重新启动机器才能使其生效。 我希望对我有帮助,它对我有用。看起来这是一个相当普遍的问题 - 至少我发现了很多关于它的讨论和它的变体。

【讨论】:

将 php 目录(不是 ext 目录)添加到 PATH 为我解决了这个问题。不需要重新启动,只需注销并重新登录即可。【参考方案6】:

更正以上信息

如果您将 php 文件夹添加到 PATH,请确保添加 php 文件夹,而不是 php/ext 文件夹。

在我的例子中,它是 C:\wamp\bin\php\php5.5.12,而不是 C:\wamp\bin\php\php5.5.12\ext。

【讨论】:

【参考方案7】:

这让我发疯了。我的路径中有所有 icu dll 等。最后安装 Visual C++ 2015 x86 为我解决了这个问题。

【讨论】:

这对我有用,谢谢(Windows 10 64 位,XAMPP 7.2.3)。

以上是关于为啥 Windows 上的 PHP 看不到扩展 php_intl.dll,即使它存在?的主要内容,如果未能解决你的问题,请参考以下文章

Windows上的PHP / cURL安装:“找不到指定的模块。”

Windows 上的 httpd.conf:找不到 API 模型结构 `php8_module`

php memcached在windows上的使用

在 Windows 中为 php 配置 curl 扩展

已解决找不到驱动程序 Debian SQL Server PHP

php curl post提交到asp,asp取不到值是为啥