【问题标题】:Sendgrid PHP Use of undefined constant CURL_SSLVERSION_TLSv1_2Sendgrid PHP 使用未定义的常量 CURL_SSLVERSION_TLSv1_2
【发布时间】:2015-06-20 10:46:26
【问题描述】:

我正在使用 Sendgrid API 通过 PHP 通过 HTTP 发送电子邮件。这是我的代码:

<?php
$url = 'https://api.sendgrid.com/';
$user = 'USER';
$pass = 'PASSWORD';
$params = array(
    'api_user'  => $user,
    'api_key'   => $pass,
    'to'        => 'TARGET',
    'subject'   => 'Kami Menanti Anda',
    'from'      => 'noreply@kompetisiindonesia.com',
  );
  $params['html'] = 'html message';
  $params['text'] = $params['html'];
$request =  $url.'api/mail.send.json';
// Generate curl request
$session = curl_init($request);
// Tell curl to use HTTP POST
curl_setopt ($session, CURLOPT_POST, true);
// Tell curl that this is the body of the POST
curl_setopt ($session, CURLOPT_POSTFIELDS, $params);
// Tell curl not to return headers, but do return the response
curl_setopt($session, CURLOPT_HEADER, false);
// Tell PHP not to use SSLv3 (instead opting for TLS)
curl_setopt($session, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2);
curl_setopt($session, CURLOPT_RETURNTRANSFER, true);
// obtain response
$response = curl_exec($session);
curl_close($session);
// print everything out
print_r($response);

但我收到此错误消息:

注意:使用未定义的常量 CURL_SSLVERSION_TLSv1_2 - 假定 'CURL_SSLVERSION_TLSv1_2' 在 /opt/lampp/htdocs/oprek/sendgrid/sendviahttp.php 在第 28 行

有人知道发生了什么吗?

【问题讨论】:

  • 正如@Matt Bernier 所说,您无需升级 PHP 即可将 CURLOPT_SSLVERSION 设置为 CURL_SSLVERSION_TLSv1_2。使用 6 代替 CURL_SSLVERSION_TLSv1_2。欲了解更多信息read this。 TLS 1.2 适用于我的 PHP 5.2.17 和 cURL 7.24.0

标签: php curl sendgrid


【解决方案1】:

您的机器上似乎安装了过时的 CURL 版本。

CURL_SSLVERSION_TLSv1_2(整数)自 PHP 5.5.19 和 5.6.3 起可用

http://php.net/manual/en/curl.constants.php

【讨论】:

    【解决方案2】:

    根据您的情况,您可以尝试使用表示常量的整数。在我们的例子中(CentOS6,使用 IUS PHP 5.3.23),常量不存在,但下面的工作正常..

    <?php
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "https://tlstest.paypal.com/");
    curl_setopt($ch, CURLOPT_SSLVERSION, 6);
    var_dump(curl_exec($ch));
    

    【讨论】:

      【解决方案3】:
      if ( ! defined('CURL_SSLVERSION_TLSv1_2')) {
              define('CURL_SSLVERSION_TLSv1_2', 6);
          }
      

      在前面添加上面的代码

      curl_setopt($session, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2);
      

      【讨论】:

        【解决方案4】:

        另外,检查您的代码运行的命名空间。如果您有 TYPO3-command-controller,它的代码将在 \TYPO3 - 命名空间中运行。在常规正常命名空间中定义的常量必须在前面加上反斜杠,然后才能正确计算。

        【讨论】:

          猜你喜欢
          • 2016-08-19
          • 1970-01-01
          • 2020-03-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-11-13
          相关资源
          最近更新 更多