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

使用PokeAPI时backend.php执行超时且DevTools不显示的问题求助

解决PokeAPI调用超时与backend.php DevTools不显示问题

一、backend.php执行超时问题

超时本质是脚本请求/处理数据的效率太低,优先从优化逻辑入手,而非单纯延长超时时间:

  • 优化PokeAPI请求方式
    避免循环逐个请求单只宝可梦数据,改用批量并发请求减少总耗时。比如用cURL多线程同时发起多个请求,单请求设置10秒超时(避免单个请求挂死拖垮整个脚本)。
    示例代码:

    // 先获取对应世代的宝可梦列表(假设你已有此逻辑)
    $generationPokemon = getGenerationPokemon($generationId);
    $urls = array_map(function($poke) {
        return "https://pokeapi.co/api/v2/pokemon/{$poke['name']}";
    }, $generationPokemon);
    
    // 初始化cURL多线程
    $mh = curl_multi_init();
    $handles = [];
    foreach ($urls as $url) {
        $ch = curl_init($url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_TIMEOUT, 10);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
        $handles[] = $ch;
        curl_multi_add_handle($mh, $ch);
    }
    
    // 执行并发请求
    $running = null;
    do {
        curl_multi_exec($mh, $running);
    } while ($running > 0);
    
    // 收集结果
    $results = [];
    foreach ($handles as $ch) {
        $response = curl_multi_getcontent($ch);
        if ($response) $results[] = json_decode($response, true);
        curl_multi_remove_handle($mh, $ch);
        curl_close($ch);
    }
    curl_multi_close($mh);
    
  • 添加本地缓存
    PokeAPI数据不会频繁更新,把请求到的结果按“世代+类型”作为key缓存到本地文件或数据库,避免重复请求。示例:

    $cacheDir = './poke_cache';
    if (!is_dir($cacheDir)) mkdir($cacheDir, 0755);
    $cacheKey = "gen_{$generationId}_type_{$type}";
    $cacheFile = "{$cacheDir}/{$cacheKey}.json";
    
    // 缓存有效期设为1天
    if (file_exists($cacheFile) && time() - filemtime($cacheFile) < 86400) {
        $outputData = json_decode(file_get_contents($cacheFile), true);
    } else {
        // 执行上面的请求、过滤逻辑
        $outputData = array_filter($results, function($poke) use ($type) {
            foreach ($poke['types'] as $t) {
                if ($t['type']['name'] === $type) return true;
            }
            return false;
        });
        file_put_contents($cacheFile, json_encode($outputData));
    }
    
    echo json_encode($outputData);
    
  • 调整超时参数(兜底方案)
    如果优化后仍有超时,可临时延长脚本超时:

    • 在backend.php开头添加:set_time_limit(300);(设置为300秒,不建议设得过大)
    • 或修改XAMPP的php.ini文件(路径:xampp/php/php.ini),找到max_execution_time改为300,保存后重启Apache。

二、backend.php在DevTools中不显示问题

按以下步骤排查:

  • 检查前端请求是否发起
    打开DevTools的「Network」标签,切换到「XHR/Fetch」分类,确认是否有backend.php的请求记录。如果没有,说明前端代码未正确发起请求:

    • 检查请求路径是否正确(比如相对路径./backend.php是否对应脚本实际位置)
    • 确认请求方法(GET/POST)与backend.php的处理逻辑匹配
    • 检查前端是否有语法错误导致请求代码未执行
  • 检查脚本输出与错误
    如果请求已发起但无记录,大概率是脚本未输出内容就终止:

    • 在backend.php开头添加错误显示代码:
      error_reporting(E_ALL);
      ini_set('display_errors', 1);
      

    访问backend.php直接看是否有语法错误或运行时错误,比如PokeAPI请求失败、变量未定义等。

  • 查看Apache日志
    打开XAMPP的Apache错误日志(路径:xampp/apache/logs/error.log),搜索backend.php相关条目,排查是否有权限不足、路径错误、服务器内部错误等问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 02:24:52