此错误仅出现在我的网络服务器上。我正在使用更新的cacert.pem并在我的localhost服务器的php.ini
文件中引用它。
我的问题是如何在典型的Web服务器上完成此操作? (我的意思是指通过cacert.pem
引用php.ini
)
或者有一种方法可以在我的函数中定义它,或者我使用的 Mailchimps API函数是通过 composer 安装的吗?
我目前的职能:
bootstrap.php
require_once __DIR__ . '\..\..\lib\Cake\Network\Http\HttpSocket.php';
控制器:
//////////////////////////MAILCHIMP///////////////////////
$Socket = new HttpSocket(array('ssl_cafile' => CAKE . 'Config' . DS . 'cacert.pem', ));
$api_key = "xxxxxxxxxxxxxxxxxxxxxxxx";
$list_id = "xxxxxxxxx";
$merge_vars = array('FNAME'=>$this->request->data['Subscriber']['first_name'], 'LNAME'=>$this->request->data['Subscriber']['last_name']);
$Mailchimp = new Mailchimp( $api_key );
$Mailchimp_Lists = new Mailchimp_Lists( $Mailchimp );
$subscriber = $Mailchimp_Lists->subscribe($list_id, array('email' => $this->request->data['Subscriber']['email']), $merge_vars);
/////////////////////////////////////////////////////////////
答案 0 :(得分:0)
请注意,这仅适用于PHP> = 5.6.0,并且会自动生效
如果您无权修改服务器上的ini_set('openssl.cafile', '/path/to/cacert');
文件,则可以在代码中使用php.ini
(http://php.net/manual/en/context.ssl.php#context.ssl.cafile)(您可以在此处阅读更多内容:{{3 }})。
如果您需要查看当前设置的咖啡馆位置,可以使用https://wiki.php.net/rfc/tls-peer-verification。
如果您使用的是PHP< 5.6.0 强>
您可能需要扩展openssl_get_cert_locations
类:
class MailchimpWithTLS extends Mailchimp {
public function __construct($apikey=null, $opts=array()) {
// Build the Mailchimp object normally
parent::__construct($apikey=null, $opts);
// Set the peer verification cURL fields
curl_setopt($this->ch, CURLOPT_SSL_VERIFYPEER, 1);
curl_setopt($this->ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($this->ch, CURLOPT_CAINFO, $opts['cafile']);
}
}
通过将cafile位置作为选项传递给构造函数来初始化它:
$Mailchimp = new MailchimpWithTLS( $api_key , array('cafile' => CAKE . 'Config' . DS . 'cacert.pem'));
答案 1 :(得分:0)
在与一些朋友交谈后,我发现我的网络服务器主机运行的cPanel有一个简单的SSL证书安装程序。
我不能评论Rasclatt提供的其他答案,因为我没有尝试过。然而,这听起来非常全面。
对于遇到此问题的人 - 请检查您的主机是否正在运行cPanel软件 - 只需点击几下即可。