You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP中file_get_contents无法识别CURL响应问题求助

解决file_get_contents(): Filename cannot be empty错误及正确调用CoinGate API的方法

首先咱们来拆解你遇到的问题:你的代码里curl_exec($curl)默认会把API的响应直接输出到浏览器,而不是把内容返回给$output变量。这时候$output的值其实是布尔值(成功返回true,失败返回false),把这个值传给file_get_contents()自然会触发“Filename cannot be empty”的错误——因为你根本没传入有效的内容。

另外还有几个小细节需要修正:比如你定义了请求头但没传给curl,以及json_decode()默认返回对象,你用数组索引取值会报错。

下面是修正后的完整代码,我会逐行解释修改点:

<?php
$auth_token = "privateprivateprivate";
$curl = curl_init("https://api-sandbox.coingate.com/v2/orders/");

// 1. 将请求头绑定到curl实例
$headers = array();
$headers[] = "Authorization: Token " . $auth_token;
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);

// 2. 关键设置:让curl_exec返回响应内容,而非直接输出
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

// 3. 执行curl请求并获取响应字符串
$output = curl_exec($curl);

// 4. 检查curl是否执行失败
if ($output === false) {
    echo "CURL执行错误: " . curl_error($curl);
    curl_close($curl);
    exit;
}

// 5. 关闭curl资源,释放内存
curl_close($curl);

// 6. 解析JSON为关联数组(第二个参数设为true)
$output_array = json_decode($output, true);

// 7. 检查JSON解析是否成功
if ($output_array === null) {
    echo "JSON解析错误: " . json_last_error_msg();
    exit;
}

// 8. 安全获取字段并输出(用??处理字段不存在的情况)
$message = $output_array["message"] ?? "未返回消息";
$reason = $output_array["reason"] ?? "未返回原因";
echo $message . "<br>" . $reason;
?>

核心修改说明:

  • CURLOPT_RETURNTRANSFER:这是解决你当前错误的关键,开启后curl_exec()会把API响应以字符串形式返回给变量,而不是直接输出到页面。
  • 绑定请求头:你之前只定义了$headers数组,但没通过curl_setopt()传给curl,导致Authorization头根本没发送,请求会因为权限验证失败。
  • 错误处理:添加了curl执行失败和JSON解析失败的检查,方便你排查后续可能遇到的问题。
  • json_decode的第二个参数:设为true会让解析结果变成关联数组,这样你用$output_array["message"]的方式取值才有效;如果不设置,默认返回对象,需要用$output_array->message访问。
  • 空值兜底:用??运算符设置默认值,避免API返回中没有message或reason字段时出现报错。

内容的提问来源于stack exchange,提问作者Luca Verdecchia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:53:02