我正在处理Zend-Framework 1.12
并且必须从应用程序发出https
请求。我通过以下方式做到了:
$client = new Zend_Http_Client($url);
$client->setAdapter($adaptor);
$client->setConfig(array('keepalive' => true));
$reCaptchaData = json_encode(array());
$client->setRawData($reCaptchaData, 'application/json');
$response = $client->request('POST');
我收到的错误如下:
Error in cURL request: SSL certificate problem: unable to get local issuer certificate
发现我必须添加CA证书,我已下载one并将其路径添加到我的php.ini
。
curl.cainfo="path"
openssl.cafile="path"
工作正常。
application.ini
吗?当我在那里尝试它时它不起作用。application.ini
是php.ini
的延伸吗?
但是无法加载模块或证书,因为这是由Apache在重启时完成的吗? Apache在重启时读取php.ini
并加载所有内容(我在php.ini
中有httpd.conf
的路径?)答案 0 :(得分:3)
根据PHP手册(http://php.net/manual/en/openssl.configuration.php),openssl.cafile
PHP_INI_PERDIR
可更改。
这意味着,如果您阅读http://php.net/manual/en/configuration.changes.modes.php,则无法在脚本级别更改它:
PHP_INI_PERDIR条目可以在php.ini,.htaccess,httpd.conf或.user.ini中设置(自PHP 5.3起)
所以,不,你将无法在Zend的application.ini
中设置这两个设置,但你可以在.htaccess
文件中通过以下方式设置:
php_value curl.cainfo "path"
php_value openssl.cafile "path"
请记住,这只有在PHP作为Apache模块加载时才有效。
如果您使用PHP-FPM,则需要创建特定池并更改其中的值。在这种情况下,它有点复杂,只有在您可以访问服务器的配置时才可行。
application.ini
不是php.ini
的扩展名,因为它有自己的语法,例如phpSettings.
前缀。
您还可以查找.user.ini
,如此处所述:http://php.net/manual/en/configuration.file.per-user.php
为了实现这一点,您需要在user_ini.filename
中为php.ini
设置一个值,当然还有一个额外的用户ini文件(您不能使用application.ini
作为.user.ini
文件。)