Как я могу установить CURLOPT_CAINFO глобально для PHP в Windows?
Я понимаю, что я могу установить эту опцию на любом конкретном экземпляре, однако мне бы очень хотелось установить что-то в php.ini или где-то подобное, которое будет обрабатывать это во всех проектах и во всех экземплярах.
Кто-нибудь знает, как мне это сделать?
EDIT:
Меня особенно интересует решение, которое позволит сертификатам находиться в разных местах на разных серверах.
Я разрабатываю на машине Windows, которая нуждается в этом, но развертывается на сервере Linux, который не только не нуждается в ней, но даже не имеет указанного пути.
Я понимаю, что я могу использовать условия, чтобы проверить, где работает код, но предпочел бы, чтобы он работал из коробки. Мне кажется, что это действительно проблема для curl и PHP для обработки, а не для моего кода, и, следовательно, настройки для него принадлежат.
Ответы
Ответ 1
Я нашел ответ здесь (в примечаниях пользователя): 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.
Ответ 2
Вот патч для эмуляции того, что мы можем видеть на 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
Пожалуйста, дайте мне знать, как это работает.
Ответ 3
@Matt прав, но я бы добавил, что curl.cainfo - это директива PHP_INI_SYSTEM, поэтому вы должны установить ее в php.ini... с помощью функции ini_set в script всегда будет возвращать false, как я узнал после слишком многих минут удара головой
Ответ 4
- скачать cacert.pem добавить в папку php
- скопировать URL-адрес файла cacert.pem
-
[curl] curl.cainfo="C:/xampp/php/cacert.pem"
Ответ 5
Вы можете создать функцию-оболочку, которая устанавливает этот параметр и использует файл 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;
}