我知道我可以在任何特定实例上设置选项,但我真正想要的是设置一些php.ini或类似的东西来处理所有项目和所有实例。
有没有人知道我这样做的方法?
编辑: 我对一个允许证书位于不同服务器上不同位置的解决方案特别感兴趣。
我正在开发一台需要这台机器的Windows机器,但是部署到一台Linux服务器,它不仅不需要它,而且甚至没有路径指示。
我知道我可以使用条件来检查代码运行的位置,但更愿意让它开箱即用。在我看来,对于curl和PHP而言,这实际上是一个问题,而不是我的代码,因此它的设置属于那里。
答案 0 :(得分:37)
我在这里找到答案(在用户备注中):http://php.net/manual/en/function.curl-setopt.php
只需将此添加到你.ini(注意:你不能使用ini_set
,虽然我不知道你为什么要这样做。谢谢@Carlton):
curl.cainfo=c:\php\cacert.pem
从http://curl.haxx.se/docs/caextract.html
获取该文件工作并且你没有为MITM攻击做好准备
答案 1 :(得分:6)
这是一个补丁,用于“模拟”在构建时找到有效的crt数据时我们在linux上看到的内容(几乎所有发行版都是如此):
http://www.php.net/~pierre/patches/curl_cacert_default.txt
它添加了一个(系统)ini设置来定义cacert的路径,curl.cainfo = c:\ curl \ ca.crt
可以在此处获取cacert数据:http://curl.haxx.se/docs/caextract.html
用于php 5.3的DLL可以在这里找到:http://www.php.net/~pierre/test/curl-5.3-vc9-x86-ts-nts-cainfodefault.zip 用于php 5.2的DLL可以在这里找到:http://www.php.net/~pierre/test/curl-5.2-cainfodefault.zip
请告诉我它是如何运作的。
答案 2 :(得分:5)
[curl] curl.cainfo="C:/xampp/php/cacert.pem"
答案 3 :(得分:4)
@Matt是对的,但我想补充一点 curl.cainfo 是一个 PHP_INI_SYSTEM 指令,所以你必须在 php.ini 中设置它...使用脚本中的 ini_set 函数将始终返回false,因为我在敲击太多分钟后发现了
答案 4 :(得分:-1)
您可以创建一个包装函数来设置该选项并使用php.ini的auto_prepend_file来加载它定义的文件,但是您的代码必须更改为使用此包装函数。
示例:
function my_curl_init($url=null) {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_CAINFO, getcwd().'/cert/ca.crt');
return $ch;
}