【问题标题】:cURL not working on RightNow/Oracle Service Cloud customer portalcURL 在 RightNow/Oracle 服务云客户门户上不起作用
【发布时间】:2015-11-10 14:34:04
【问题描述】:

我有一个小的 php 脚本,用于测试 cURL 是否已安装并正常运行。这适用于我们的 Oracle 服务云沙箱环境(websitename.rightnowdemo.com),它在页面顶部和下方显示 google.com,它打印测试功能的结果(“cURL 已安装在此服务器上”) .但是,我们的开发 (websitename.custhelp.com) 环境中的相同代码不起作用。它只打印“cURL 已安装”消息,仅此而已。在我们的新环境中是否有需要设置的配置设置?我怎样才能让 cURL 充分发挥作用?

代码:

<rn:meta title="cURL Example" template="agent.php" clickstream=""/>

<?php
load_curl();
$curlURL = "www.google.com";
$ch = curl_init($curlURL);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_FAILONERROR, 0);
$result = curl_exec($ch);
echo $result;
curl_close($ch);

?>

<html>
<head></head>
<body>
<?php

// Script to test if the CURL extension is installed on this server

// Define function to test
function _is_curl_installed() {
    if  (in_array  ('curl', get_loaded_extensions())) {
        return true;
    }
    else {
        return false;
    }
}

// Ouput text to user based on test
if (_is_curl_installed()) {
  echo "cURL is <span style=\"color:#4fa361;\">installed</span> on this server";
} else {
  echo "cURL is <span style=\"color:#dc4f49\">not installed</span> on this server";
}


?>
</body>
</html>

【问题讨论】:

  • 为什么还要打一个 curl 调用来检查是否安装了 curl?为什么不使用http://www.google.com 作为 URL?
  • 我们已经尝试了 URL 的所有组合,上面代码中的 URL 只是在我们的沙盒站点上尝试并运行的最后一个。在将一些文件从一种环境迁移到另一种环境后,我们注意到了一些问题。使用 cURL 的脚本在一个沙箱中运行良好,但在开发人员中却无法运行。 cURL 调用只是这里某人确保库可用的额外手段。

标签: php curl crm rightnow-crm oracle-service-cloud


【解决方案1】:

您在生产中使用什么版本的 OSvC (*.custhelp.com)?很有可能,您的演示环境和​​生产环境之间的版本不同。由于 rightnowdemo 环境与您的站点不同步,因此最好在一个真正的测试站点上开发,该站点是您的产品的克隆。请在此处包含您的生产 OSvC 版本,因为您可能需要使用较旧的 dl() 方法将 curl 加载到您的脚本中。

另一个问题可能是您试图在视图文件中实现 load_curl() 方法,这通常是个坏主意。您应该从控制器或模型中执行此操作。您可能会遇到 CP3 中引入的命名空间问题,其中强制实施命名空间。在根命名空间而不是您的 CP 命名空间中检查 curl_init

if (!function_exists("\curl_init"))
{
    \load_curl();
}

话虽如此,如果您收到一条消息说 curl 已安装,那么它应该正确加载 curl。 google.com 很可能出于多种原因使用 curl 拒绝来自生产服务器的请求。您可以使用以下方法检查 curl 错误:

if($errno = curl_errno($ch)) {
    $error_message = curl_strerror($errno);
    echo "cURL error ({$errno}):\n {$error_message}";
}

【讨论】:

  • 嗨,斯科特,感谢您的回复。我们使用的是 2015 年 8 月(内部版本 141)版本的 OSvC。没错,此代码正在视图中使用。这是一个命名空间问题,但仍然显示正在安装 cURL 的消息的可能性有多大?因为我相信您的第二个建议是正确的,所以检查您建议的 curl 错误会产生错误“调用未定义的函数 curl_strerror”,因此命名空间可能会干扰 cURL 的正确加载。
  • 尝试使用function_exists("\curl_init") 检查而不是您的扩展检查。 PHP 中加载的扩展并不一定意味着该函数在应用层公开。尝试删除 curl_strerror 以查看 errno 是否产生结果。
  • 是的,错误 7 是“无法连接()到主机或代理”
  • 您使用的是 PS 还是 PC Pod?如果是这样,那么 Oracle 托管将不得不为您打开防火墙。将 google.com 替换为 oracle.com 会发生什么?
  • 我们联系了 Oracle 并解决了问题。再次感谢斯科特!
猜你喜欢
  • 1970-01-01
  • 2020-06-28
  • 2015-12-04
  • 2020-07-19
  • 1970-01-01
  • 1970-01-01
  • 2019-01-08
  • 2019-12-29
  • 2012-11-11
相关资源
最近更新 更多