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

PHP调用分页API写入文件:数据未追加仅保留最后一页

问题分析与修复代码

核心问题

  1. 循环未更新分页状态:每次请求下一页后,没有将新响应解码为$data,导致循环一直沿用初始页的hasMore状态和cursor,要么无限重复请求同一页,要么提前终止循环。
  2. 过早关闭CURL句柄:curl_close($curl)写在循环内部,第一次循环结束就销毁了CURL资源,后续循环无法发起新请求。
  3. 初始写入逻辑存在覆盖风险:首次写入用默认覆盖模式,若后续循环异常,可能丢失初始页数据。

修正后的代码

<?php
ini_set('max_execution_time','240');
$url = "https://myDomain/incoming/v2/content";

// 仅初始化一次CURL句柄
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

$headers = array(
   "Accept: application/json",
   "Authorization: Bearer myKey",
);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
// 仅本地调试使用,生产环境请开启SSL验证
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);

// 首次请求并写入文件(先清空文件再写入初始页)
file_put_contents('CURL-MEETINGS-ILT-VILT_NEWEST.txt', '');
$response = curl_exec($curl);
if ($response === false) { 
    die("Error: " . curl_error($curl)); 
}
file_put_contents('CURL-MEETINGS-ILT-VILT_NEWEST.txt', $response, FILE_APPEND);

$data = json_decode($response, true);
// 循环获取所有分页数据
while ($data['pageInfo']['hasMore'] === true) {
    $cursor = $data['pageInfo']['cursor'];
    // 更新请求URL为带cursor的地址
    curl_setopt($curl, CURLOPT_URL, "https://myDomain/incoming/v2/content?cursor=$cursor");
    
    $response1 = curl_exec($curl);
    if ($response1 === false) { 
        die("Error: " . curl_error($curl)); 
    }
    
    // 追加写入当前页数据
    file_put_contents('CURL-MEETINGS-ILT-VILT_NEWEST.txt', $response1, FILE_APPEND);
    echo "File appended successfully\n";

    // 关键:更新$data为当前页的响应数据,供下一次循环判断使用
    $data = json_decode($response1, true);
}

// 所有请求完成后再关闭CURL句柄
curl_close($curl);
?>

额外说明

  • 先执行file_put_contents('xxx.txt', '')清空目标文件,避免残留旧数据。
  • 每次循环必须更新$data变量,确保下一次循环使用当前页的hasMore状态和最新cursor。
  • CURL句柄仅在所有请求完成后关闭,避免重复初始化资源,提升执行效率。

内容的提问来源于stack exchange,提问作者Mark H-TR

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 05:35:03