证书存储可以放在application.ini而不是php.ini中

时间:2017-06-28 06:40:28

标签: php apache curl zend-framework php-openssl

我正在处理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"

工作正常。

  1. 但是我不能将其添加到我的application.ini吗?当我在那里尝试它时它不起作用。
  2. application.iniphp.ini的延伸吗? 但是无法加载模块或证书,因为这是由Apache在重启时完成的吗? Apache在重启时读取php.ini并加载所有内容(我在php.ini中有httpd.conf的路径?)

1 个答案:

答案 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文件。)