【问题标题】:CURLOPT_RETURNTRANSFER on working on localhost but not working on live server in phpCURLOPT_RETURNTRANSFER 在 localhost 上工作,但不在 php 中的实时服务器上工作
【发布时间】:2021-05-22 06:57:31
【问题描述】:
$user_access ='example';
$user_key = 'examplekey';
$payload = json_encode($arr);
$curl_handle=curl_init();
curl_setopt($curl_handle,CURLOPT_URL,'example.com/api/users/2');
curl_setopt($curl_handle, CURLOPT_HTTPHEADER, array('Content-Type: application/json','Content-Length: ' . strlen($payload)));
curl_setopt($curl_handle, CURLOPT_CUSTOMREQUEST, 'PUT');
curl_setopt($curl_handle, CURLOPT_POSTFIELDS, $payload );
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl_handle, CURLOPT_USERPWD, $user_access . ":" . $user_key);  
if (curl_exec($curl_handle) === FALSE) {
    die("Curl Failed: " . curl_error($curl_handle));
} else {
    return curl_exec($curl_handle);
};

当我删除 curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1); 时,它可以在本地和实时服务器上运行。我不需要自动返回 curl_exec 值,所以我使用的是curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);

我无法确定问题所在。请帮帮我

【问题讨论】:

  • 你调用curl_exec 两次,你不应该存储第一次调用的值然后检查它是否为假吗?

标签: php laravel codeigniter curl


【解决方案1】:

如果您检查了您在本地和您的实时服务器上使用了可能的环境(例如 PHP 版本、curl_exec 未在实时服务器上被阻止,对于某些主机来说就是这种情况),那么很可能是远程服务器( API-Server)实际上响应不同。这可能是它具有基于 IP 地址或其他东西的访问级别。

一般考虑:

  • 您正在执行curl_exec() 两次:首先检查它的返回是否为FALSE,如果不是,则再次检查。而是将返回值存储在变量中
  • 尝试设置curl_setopt($curl_handle, CURLOPT_VERBOSE, true);,以便获得有关潜在错误的更多信息
  • 使用为您处理这些事情的 HTTP 请求库,例如 Guzzle,它也带来了良好的错误处理。安装后:
$httpClient = new GuzzleHttp\Client();
$response = $client->request('PUT', 'https://example.com/api/users/2', [
    'auth' => [$user_access, $user_pass],
    'json' => $arr
]);

return $response->getBody();

将为您处理一切。

【讨论】:

    【解决方案2】:

    你应该像下面这样比较和处理;

    $Result = curl_exec($curl_handle);
    if($Result === false)die("Curl Failed: " . curl_error($curl_handle)); // Just an error display interceptor
    return $Result; // Always return the appropriate response
    

    在您的代码中可以肯定的是,您正试图将其包装在一个函数中,并且该函数应该总是返回一些东西。在这里,无论 cURL 成功还是失败,我们都会返回 $Result,您需要与调用者进行显式检查,以查看您的 cURL 方法是否有效($cURLFunctionReturnValue === false)以及类似的代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-01
      • 1970-01-01
      相关资源
      最近更新 更多