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

Can certificate store be placed in application.ini instead of php.ini

我正在处理 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.ini 是否可以作为 php.ini 的扩展? 但是无法加载模块或证书,因为这是由 Apache 在重新启动时完成的吗? Apache 在重新启动时读取 php.ini 并加载所有内容(我在 httpd.conf 中有 php.ini 的路径)?

根据PHP的手册(http://php.net/manual/en/openssl.configuration.php),openssl.cafilePHP_INI_PERDIR可变的。

这意味着,如果您阅读 http://php.net/manual/en/configuration.changes.modes.php,则无法在脚本级别更改它:

PHP_INI_PERDIR Entry can be set in php.ini, .htaccess, httpd.conf or .user.ini (since PHP 5.3)

所以,不,您将无法在 Zend 的 application.ini 中设置这 2 个设置,但您可以通过以下方式在 .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

为了让它工作,您需要在 php.ini 中为 user_ini.filename 设置一个值,当然还有一个额外的用户 ini 文件(您不能使用 application.ini 作为 .user.ini 文件)。