2010-04-22 99 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"
相關問題