2010-04-22 72 views
14

我明白我可以在任何特定的实例上设置选项,但是我真正想要的是设置一些php.ini或类似的地方,这将在所有项目和所有实例中处理此问题。如何在Windows上为PHP设置CURLOPT_CAINFO?

有没有人知道我的方式来完成这个?

编辑: 我特别感兴趣的解决方案,将允许证书在不同的服务器上的不同位置。

我正在开发一台Windows机器,它需要这个,但部署到Linux服务器不仅不需要它,但甚至没有指示的路径。

据我所知,我可以使用条件来检查代码的运行位置,但宁愿只是让它开箱即用。在我看来,这是curl和PHP处理问题的真正问题,而不是我的代码,因此它的设置属于此处。

+1

这正是我想解决过问题的地方。在我的情况下,我使用的是一个框架,它将所有curl调用封装在它的类层次结构中,所以如果我需要使其工作,我实际上需要修补框架。虽然这并不困难,但有明显的缺点和负面影响。因此从外部设置该选项的可能性会非常有帮助。 – jayarjo 2010-07-11 06:30:24

回答

-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; 
} 
+0

我应该澄清一点,我正在寻找一种解决方案,该解决方案将允许我在需要时在Windows上进行本地开发,并将其部署到不需要其他服务器的位置。 – YonahW 2010-04-23 18:07:04

6

这里是“效仿”我们可以在Linux上看到,当一个有效的CRT数据已经发现在制作的时候(这是情况下,几乎所有发行版)补丁:

http://www.php.net/~pierre/patches/curl_cacert_default.txt

它增加了一个(系统)INI设置以限定路径CACERT,curl.cainfo = C:\卷曲\ 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

请让我知道它是如何工作。

+0

仅供参考:我将这个补丁应用于php src,5.3及更高版本。 – Pierre 2011-06-11 13:22:45

+0

谢谢! Patched .dll for PHP 5.2 nts工作得很好。 (Zend Server CE附带的Win7,PHP 5.2发行版) – 2011-08-09 17:11:41

+0

链接不再工作,但这也正是我需要的。 – Matt 2012-12-28 04:55:00

28

我找到了答案在这里(在用户备注):http://php.net/manual/en/function.curl-setopt.php

只是将它添加到您的.ini(注:不能使用ini_set,虽然我不知道你为什么会想感谢@卡尔顿):

curl.cainfo=c:\php\cacert.pem 

,并从该文件:http://curl.haxx.se/docs/caextract.html

作品,你是不是开放和自己的MITM攻击

+0

对于那些使用HexChat的人,它也附带一个证书列表('Hexchat \ cert.pem ')。使用它的好处是,无论何时您将更新HexChat,它都会自动更新。 – 2016-03-13 22:55:56

3

@马特是正确的,但我想补充一点,curl.cainfoPHP_INI_SYSTEM指令,所以你必须将其设置在php.ini中...使用的ini_set功能的脚本将总是返回false我经过了太多分钟的头撞之后才发现

3
  1. download cacert。PEM添加到文件夹的PHP
  2. 复制网址文件cacert.pem
  3. [curl] curl.cainfo="C:/xampp/php/cacert.pem"
相关问题