Как я могу установить CURLOPT_CAINFO глобально для PHP в Windows?

Я понимаю, что могу установить опцию на любом конкретном экземпляре, однако мне бы очень хотелось установить что-то php.ini или где-то подобное, которое будет обрабатывать это во всех проектах и ​​во всех экземплярах.

Кто-нибудь знает, как мне это сделать?

EDIT: меня особенно интересует решение, которое позволит сертификатам находиться в разных местах на разных серверах.

Я разрабатываю на Windows-машине, которая нуждается в этом, но развертывается на сервере Linux, который не только не нуждается в нем, но даже не имеет указанного пути.

Я понимаю, что я могу использовать условия, чтобы проверить, где работает код, но предпочел бы, чтобы он работал из коробки. Мне кажется, что это действительно проблема для curl и PHP для обработки, а не для моего кода, и, следовательно, настройки для нее принадлежат.

Я нашел ответ здесь (в примечаниях пользователя): 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

Вот патч, чтобы «эмулировать» то, что мы можем видеть в linux, когда действительные данные crt были найдены во время сборки (что имеет место почти для всех дистрибутивов):

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 DLL для php 5.2 можно найти здесь: http: //www.php.net/~pierre/test/curl-5.2-cainfodefault.zip

Пожалуйста, дайте мне знать, как это работает.

@Matt прав, но я бы добавил, что curl.cainfo является директивой PHP_INI_SYSTEM, поэтому вы должны установить его в php.ini … использование функции ini_set в скрипте всегда будет возвращать false, как я узнал после слишком большого количества минут треск

  1. загрузить cacert.pem добавить в папку php
  2. скопировать URL-адрес файла cacert.pem
  3. [curl] curl.cainfo="C:/xampp/php/cacert.pem"

Вы можете создать функцию-оболочку, которая устанавливает этот параметр, и использовать файл auto_prepend_file для php.ini для загрузки файла, в котором он определен, но ваш код нужно будет изменить, чтобы вместо этого использовать эту функцию-оболочку.

Пример:

 function my_curl_init($url=null) { $ch = curl_init($url); curl_setopt($ch, CURLOPT_CAINFO, getcwd().'/cert/ca.crt'); return $ch; }