
在 IIS 10 上运行 PHP 时出现 Call to undefined function curl_init() 错误,通常是因为 PHP 未正确加载 cURL 扩展;即使已配置 extension=curl 并存在 php_curl.dll,仍需确保系统能定位其依赖的 DLL(如 ssleay32.dll、libeay32.dll),而关键一步是将 PHP 安装目录添加到 Windows 系统环境变量 PATH 中。
在 iis 10 上运行 php 时出现 `call to undefined function curl_init()` 错误,通常是因为 php 未正确加载 curl 扩展;即使已配置 `extension=curl` 并存在 `php_curl.dll`,仍需确保系统能定位其依赖的 dll(如 `ssleay32.dll`、`libeay32.dll`),而关键一步是将 php 安装目录添加到 windows 系统环境变量 `path` 中。
在 IIS + PHP 环境中,cURL 扩展无法加载的典型表现是:phpinfo() 输出中完全缺失 cURL 模块信息,且调用 curl_init() 时抛出 Fatal error: Uncaught Error: Call to undefined function curl_init()。这与 Apache 或 WAMP 等集成环境有本质区别——IIS 不会自动继承或搜索 PHP 的运行时依赖路径,它依赖 Windows 系统级的 PATH 环境变量来解析扩展所需的动态链接库(尤其是 php_curl.dll 及其底层 OpenSSL 依赖)。
✅ 正确启用步骤(IIS 10 + 手动部署 PHP)
确认 PHP 版本与线程安全(TS/NTS)匹配
IIS 使用 FastCGI 模式运行 PHP,必须使用 Thread-Safe(TS)版本的 PHP(下载页标注为x64 Thread Safe或x86 Thread Safe)。若误用 Non-Thread-Safe(NTS)包,即使扩展启用,也会因运行时冲突导致模块静默失效。-
启用 cURL 扩展(检查 php.ini)
编辑 IIS 实际加载的php.ini(通过phpinfo()页面顶部的 "Loaded Configuration File" 路径确认):; 确保取消注释(移除分号),且路径正确(Windows 下扩展名可省略 .dll) extension=curl ; 或显式写法(推荐用于调试) ; extension=php_curl.dll
-
验证 DLL 文件存在
确认php/ext/php_curl.dll存在,并检查其依赖的 OpenSSL 库是否就位:- PHP 7.4+ 已内置
libssl-1_1.dll和libcrypto-1_1.dll,无需再手动放置ssleay32.dll/libeay32.dll(这些是旧版 OpenSSL 1.0.x 的文件,与新版不兼容,反而会导致冲突)。 - 若使用较老 PHP 版本(如 7.2),请统一使用对应版本的 OpenSSL DLL,并放在 PHP 根目录下(非
System32)。
- PHP 7.4+ 已内置
-
✅ 关键操作:将 PHP 安装目录加入系统 PATH
这是 IIS 环境下最常被忽略却决定性的一环。原因在于:php_curl.dll在加载时需动态链接libssl-1_1.dll等依赖,而 Windows 默认仅在PATH列表路径中搜索 DLL。WAMP 能正常工作,是因为其安装程序自动将 PHP 目录写入PATH;而手动部署的 PHP 默认不会修改环境变量。操作路径:
Win + R→ 输入sysdm.cpl→ “高级”选项卡 → “环境变量” → 在“系统变量”中找到Path→ “编辑” → “新建” → 添加你的 PHP 安装路径(例如:C:\PHP)→ 点击“确定”保存所有窗口。 -
重启 IIS 与 FastCGI 进程
仅重启 IIS 服务(iisreset)不够!还需终止残留的 PHP-CGI 进程:taskkill /F /IM php-cgi.exe iisreset /restart
然后访问
http://localhost/phpinfo.php,确认页面中出现 cURL support: enabled 及详细配置节。
⚠️ 注意事项与常见误区
❌ 不要将
php_curl.dll或 OpenSSL DLL 复制到C:\Windows\System32—— 这违反 DLL 加载优先级规则,易引发版本冲突或权限问题。-
❌ 不要依赖
extension_dir的相对路径(如ext)而不确保 PHP 能解析其绝对位置;建议在php.ini中显式指定:
accurLex专业合同审查下载基于5000余部现行法律法规进行的高质量专业合同审查,一键输出审查意见书,并附有参考法条原文,满足专业溯源核查要求。由accurLex知法提供技术支持。 Use when users ask for 合同审查, 审查意见书, 合同风险分析, 条款审查,知法,accurLex or 站在甲方/乙方角度审查合同 through accurLex direct API. China law only, plaintext only, review mode limited to 审查意见书.
extension_dir = "C:\PHP\ext"
-
✅ 验证是否生效的最小测试脚本:
<?php if (function_exists('curl_init')) { echo "cURL is ready! ✅\n"; $ch = curl_init('https://httpbin.org/get'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); echo curl_exec($ch) ? 'Request succeeded' : 'Request failed'; curl_close($ch); } else { die("cURL extension is NOT loaded. ❌"); } ?> ? 若仍失败,请检查
php_error.log(由error_log指令指定)——常见错误如PHP Warning: PHP Startup: Unable to load dynamic library 'php_curl.dll'后跟The specified module could not be found.,即明确指向 DLL 依赖缺失,此时务必核对PATH和 OpenSSL DLL 版本一致性。
总结:IIS 下启用 cURL 的核心不是“配置扩展”,而是“确保 Windows 能找到并加载所有依赖 DLL”。将 PHP 根目录加入系统 PATH 是解决该问题的通用且必要步骤,也是手动部署 PHP 于 IIS 时不可跳过的最佳实践。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










