繁体   English   中英

CURLOPT_RETURNTRANSFER 在本地主机上工作,但在 php 中的实时服务器上不工作

[英]CURLOPT_RETURNTRANSFER on working on localhost but not working on live server in php

$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);

我无法确定问题。 请帮我

如果您检查了您在本地和您的实时服务器上使用了可能的环境(例如 PHP 版本、 curl_exec在实时服务器上未被阻止,对于某些主机来说就是这种情况),那么很可能是远程服务器(API-服务器)实际上是不同的反应。 这可能是它具有基于 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();

将为您处理一切。

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

$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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM