使用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开头添加:
二、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请求失败、变量未定义等。
- 在backend.php开头添加错误显示代码:
查看Apache日志
打开XAMPP的Apache错误日志(路径:xampp/apache/logs/error.log),搜索backend.php相关条目,排查是否有权限不足、路径错误、服务器内部错误等问题。
内容的提问来源于stack exchange,提问作者Farsis
相关产品推荐
相关产品推荐

