我知道我可以在任何特定实例上设置选项,但是我真正想要的是设置一些php.ini或类似的东西来处理所有项目和所有实例.
有谁知道我这样做的方法?
编辑:我特别感兴趣的是一个允许证书在不同服务器上的不同位置的解决方案.
我正在开发一台Windows机器,它需要这个,但部署到Linux服务器,它不仅不需要它,甚至没有指示路径.
我知道我可以使用条件来检查代码运行的位置,但更愿意让它开箱即用.在我看来,对于curl和PHP而言,这实际上是一个问题,而不是我的代码,因此它的设置属于那里.
Mat*_*att 37
我在这里找到了答案(在用户注释中):http://php.net/manual/en/function.curl-setopt.php
只需将此添加到你.ini(注意:你不能使用ini_set,虽然我不知道你为什么要这样.谢谢@Carlton):
curl.cainfo=c:\php\cacert.pem
Run Code Online (Sandbox Code Playgroud)
并从http://curl.haxx.se/docs/caextract.html获取该文件
工作,你没有打开自己的MITM攻击
这是一个补丁,用于"模拟"在构建时找到有效的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
DLL为PHP 5.3可以在这里找到: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
请让我知道它是如何工作的.
@Matt 是对的,但我想补充一点,curl.cainfo是一个PHP_INI_SYSTEM指令,所以你必须在php.ini 中设置它......在脚本中使用ini_set函数将始终返回 false,因为我在经过几分钟的思考后发现敲打
小智 -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;
}
Run Code Online (Sandbox Code Playgroud)