今天我将XAMPP的内部迁移到64位:
我已经下载了之前使用过的32位,安装,配置的每个扩展程序(如果需要,主要通过路径更改进行复制和粘贴),通常一切都“有效”。
-> % php --version
PHP 7.1.9 (cli) (built: Aug 30 2017 18:34:46) ( ZTS MSVC14 (Visual C++ 2015) x64 )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies
但是不管怎么说,即使有有效的DLL(大多数都捆绑在下载的PHP包中),我也会遇到PHP Startup: Unable to load dynamic library
错误。这些是curl
,intl
,ldap
和imagick
(最后一个由我安装)。路径在php.ini
中是正确的(许多其他扩展从同一目录正确加载)。每当我通过Apache访问页面时,这就是php_error_log
中的内容:
[22-Sep-2017 15:52:47 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'D:\Bin\XAMPP\7.0.9\php\ext\php_curl.dll' - The specified module could not be found.
in Unknown on line 0
[22-Sep-2017 15:52:47 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'D:\Bin\XAMPP\7.0.9\php\ext\php_intl.dll' - The specified module could not be found.
in Unknown on line 0
[22-Sep-2017 15:52:47 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'D:\Bin\XAMPP\7.0.9\php\ext\php_ldap.dll' - The specified module could not be found.
in Unknown on line 0
[22-Sep-2017 15:52:47 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'D:\Bin\XAMPP\7.0.9\php\ext\php_imagick.dll' - The specified module could not be found.
in Unknown on line 0
在CLI中,一切都很好(与Apache的php.ini
相同):
-> % php -i | grep -n3 curl
175:curl
178-cURL Information => 7.55.0
-> % php -i | grep -n3 ldap
347:ldap
349-LDAP Support => enabled
350-RCS Version => $Id: 0779387e5f88edc656159d12b9302a053e82cc79 $
-> % php -i | grep -n3 intl
330:intl
332-Internationalization support => enabled
333-version => 1.1.0
335-ICU Data version => 57.1
但在Apache中我遇到Attempted to call function "curl_init" ...
错误:(
有什么想法吗?
答案 0 :(得分:0)
它基本上是404 dll's。 apache运行的用户,没有权限读取文件夹D:\Bin\XAMPP\7.0.9\php\ext\
,或文件夹不存在。至于为什么它在cli中工作但不在apache中工作,他们可能会阅读不同的php.ini,但也可能是php-cli作为不同的用户帐户运行。检查一下,在cli中运行php -r 'phpinfo();' | grep -i username
,在<?php phpinfo();
运行一个页面,然后查找&#34; Enviorment&#34; &GT; &#34;用户&#34;在apache phpinfo(); ,这些页面还会告诉您他们是否正在加载相同的php.ini文件。
并且这与编程无关,所以我再说一遍,这应该是在serverfault.com上的东西,而不是stackoverflow.com
答案 1 :(得分:0)
检查您的DLL是否版本正确。 x64和x86版本之间经常存在差异,ZTS和NON TREAD SAFE之间也存在差异。由于某种原因而不是ddls不兼容的好错误消息,您将只获取信息:无法加载扩展名。
答案 2 :(得分:0)
嗯,这很奇怪,但这个问题的根本问题是......使用Apache作为服务。我无法解释原因,但是当运行Apache作为服务时,无法加载这些扩展,但是在没有服务的情况下运行时,仅使用&#34; Start&#34;从XAMPP控制中心,所有工作正常,具有相同的配置和目录/文件结构。
我意识到当我想回到之前的工作版本并再次链接32位版本时(我在XAMPP安装目录中使用apache
和php
符号链接)。 cURL未加载,但在迁移到64位之前它正在运行。所以我开始挖掘和试验服务,并在取消注册后开始正常工作。所以我认为它也可能是64位的情况......而且它是。
现在我可以正确启动Apache了。还有一个小问题,因为XAMPP控制面板在点击&#34; Start&#34;后没有显示Apache正在运行,但是进程在那里并且正在运行。但最重要的是引擎盖下的一切都很好。
答案 3 :(得分:0)
我在Windows 10上遇到了同样的问题,并通过将php home目录添加到系统(非用户!)PATH环境中并重新启动系统来解决了该问题。 当Apache作为服务安装时,它将以系统用户身份运行,这意味着它看不到用户环境变量。
答案 4 :(得分:0)
我遇到了同样的问题。除了这两个之外的所有扩展加载:amqp 和 pdo_sqlite:
PHP Warning: PHP Startup: Unable to load dynamic library 'pdo_sqlite' (tried: D:\\xampp74\\php\\ext\\pdo_sqlite (The specified module could not be found.), D:\\xampp74\\php\\ext\\php_pdo_sqlite.dll (The specified module could not be found.)) in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library 'amqp' (tried: D:\\xampp74\\php\\ext\\amqp (The specified module could not be found.), D:\\xampp74\\php\\ext\\php_amqp.dll (The specified module could not be found.)) in Unknown on line 0
一种解决方案是将 php 路径添加到您的环境变量 PATH 中。
这里真正的问题是,尽管扩展 dll 位于 xampp\php\ext
中,但某些扩展具有位于 xampp\php
中的附加文件。如果没有将 php 路径添加到您的 PATH 中,这些额外的 dll 是无法加载的。
如果您不想将 PHP 路径添加到您的 PATH 中,解决方案是将额外的 dll 文件添加到 xampp\apache\bin
文件夹(复制,而不是移动)。就我而言:
或者,如果你通过批处理文件启动apache,在启动apache之前添加php路径:
SET PATH=%PATH%;d:\xampp74\php