【问题标题】: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。

标签: php intl


【解决方案1】:

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

【讨论】:

  • 这对我有用,谢谢(Windows 10 64 位,XAMPP 7.2.3)。
【解决方案2】:

更正以上信息

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

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

【讨论】:

    【解决方案3】:

    我遇到了同样的问题,在解决这个问题将近 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 为我解决了这个问题。不需要重新启动,只需注销并重新登录即可。
    【解决方案4】:

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

    (Windows 7 图形用户界面)

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

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

    • 为我工作。

    【讨论】:

      【解决方案5】:

      完整的解决方法是更改​​ 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 并重新启动
      【解决方案6】:

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

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

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

      【讨论】:

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

      确保 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 工作过。非常感谢
      猜你喜欢
      • 2019-03-26
      • 2016-12-10
      • 2016-11-19
      • 1970-01-01
      • 2010-11-29
      • 2013-04-28
      • 2022-06-11
      • 1970-01-01
      相关资源
      最近更新 更多