我最近升级到了 php 7.1.31,从安装 EasyPhp (Windows 7, x86) 开始。安装文件并配置 php.ini 文件后,一切运行正常,除了 curl 扩展存在问题:
**Fatal error: Uncaught Error: Call to undefined function curl_init()**
phpinfo() 确认缺少 curl 扩展。
经过多次验证和测试:
- 这不是 php.ini 中取消注释扩展的问题(“;extension=php_curl.dll” 已正确取消注释)。
- libeay32.dll、ssleay32.dll、libssh2.dll 位于 /php 目录根目录的正确目录中(我也尝试将其放在 /system32 文件夹中,尽管这是一个坏主意,但效果并不好)
- php_curl.dll 位于 /ext/ 目录中
- Windows 事件查看器中未发现相关错误或日志
- Windows PATH var 包含 /php 目录
- extension_dir 路径在 php.ini 文件中设置正确(所有其他扩展均正常运行)
- 我尝试了 ssleay32.dll、ssleay32.dll 和 libssh2.dll 的各种版本,因为我认为其中一个可能被损坏,但什么也没有改变。
也许是一个提示:我已经使用 DOS php 命令行实用程序检查了已知扩展的列表:
php -r "print_r(get_loaded_extensions())";
它返回 41 个扩展的列表包括curl 和 openssl!但是,在 php 页面(Apache 2.4)中执行相同的命令:
echo "<pre>", print_r(get_loaded_extensions()), "</pre>";
返回 39 个扩展的列表,curl 和 openssl 是丢失的。
底层 php.ini 文件与 php CLI 和使用 php/apache 运行的网页所使用的文件相同...
另外一点,https://www.php.net/manual/en/curl.installation.php请参阅 libcrypto-.dll 但 libcrypto-.dll 不在 php 的默认下载文件夹中(为什么?)。我测试了 libcrypto-.dll,但没有成功
任何想法都将不胜感激!
答案1
我在启动 PHP 7.3 时遇到了类似的问题。
之前(至少在 7.2.3 上),设置extension_dir = "ext"
工作正常。但在 7.3.14 或 7.4.2 上,这不起作用。我必须像这样完全设置路径:
extension_dir = "C:\Program Files\Webserver\bin\PHP\7.4.2\ext"
我通过阅读 apache 错误日志找到了问题