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

如何提升PHP页面性能?现有PHP代码GET请求加载耗时10秒

我来帮你拆解下代码慢的原因,一步步优化——既然你说代理本身速度快,直播链接加载只要1秒,那瓶颈肯定出在PHP处理文件和请求的方式上。下面是具体的优化方案:

1. 简化info.txt读取逻辑,去掉冗余操作

原代码把文件每一行存入数组再extract,完全是多余的操作,而且用@屏蔽错误会导致文件读取失败时静默卡壳。我们直接读取并过滤有效行:

// 读取文件时自动忽略换行符和空行,去掉@以便捕获错误
$lines = file("info.txt", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
if (!$lines || count($lines) < 2) {
    die("无法从info.txt读取代理或Cookie配置");
}
// 直接取对应行,不用循环和extract
$proxy = $lines[0];
$sessionCookie = $lines[1];

2. 优化HTTP请求配置,设置超时避免阻塞

file_get_contents默认没有设置合理的超时,很容易因为请求卡住拖慢整个流程。我们为单个请求创建上下文,而非全局设置,同时添加连接和读取超时:

$n = str_replace("/num?", "", $_SERVER['REQUEST_URI']);
$apiUrl = "http://**********/$n";

// 创建请求上下文,配置超时和代理
$context = stream_context_create([
    'http' => [
        'proxy' => $proxy,
        'request_fulluri' => true,
        'header' => [
            "Cookie: PHPSESSID=$sessionCookie",
            "Connection: close" // 关闭长连接,减少等待时间
        ],
        'connect_timeout' => 1, // 连接代理超时1秒
        'timeout' => 3, // 总请求超时3秒
        'ignore_errors' => true, // 允许获取错误状态码的响应
        'protocol_version' => 1.1 // 使用HTTP/1.1提升效率
    ]
]);

// 获取API数据,检查返回值避免后续错误
$data = file_get_contents($apiUrl, false, $context);
if (!$data) {
    die("API请求失败");
}

3. 去掉不必要的数组操作,减少内存开销

原代码用$url[$n]这类带索引的数组完全没必要,因为每次请求只处理一个$n,直接用普通变量即可:

// 解码JSON并检查有效性
$values = json_decode($data, true);
if (!is_array($values) || !isset($values['results']['otherurl'])) {
    die("API返回格式错误");
}

// 跳转并立即终止脚本,避免多余执行
$redirectUrl = $values['results']['otherurl'];
header("Location: " . $redirectUrl);
exit;

4. 进阶:用CURL替代file_get_contents(性能更优)

CURL比file_get_contents更灵活,错误处理更完善,性能也更好,适合HTTP请求场景:

$ch = curl_init($apiUrl);
curl_setopt_array($ch, [
    CURLOPT_PROXY => $proxy,
    CURLOPT_HTTPHEADER => ["Cookie: PHPSESSID=$sessionCookie"],
    CURLOPT_CONNECTTIMEOUT => 1,
    CURLOPT_TIMEOUT => 3,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_FOLLOWLOCATION => false,
    // 如果目标是HTTPS,根据实际情况调整SSL验证
    CURLOPT_SSL_VERIFYPEER => false,
    CURLOPT_SSL_VERIFYHOST => false
]);

$data = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

// 检查请求是否成功
if ($data === false || $httpCode !== 200) {
    die("API请求失败: " . curl_error($ch));
}
curl_close($ch);

// 后续JSON解码和跳转逻辑同上

额外优化建议

  • 缓存配置文件:如果info.txt里的代理和Cookie不经常变化,用APCu缓存配置(有效期1小时),避免每次请求都读文件:
    if (apcu_exists('proxy_config')) {
        $config = apcu_fetch('proxy_config');
        $proxy = $config['proxy'];
        $sessionCookie = $config['cookie'];
    } else {
        // 读取info.txt的逻辑...
        apcu_store('proxy_config', ['proxy' => $proxy, 'cookie' => $sessionCookie], 3600);
    }
    
  • 开启OPcache:在php.ini中启用OPcache,缓存编译后的PHP代码,减少每次请求的编译开销。
  • 检查代理格式:确保代理地址是正确的格式(如http://ip:port),格式错误会导致连接超时。

完整优化后的代码示例(用CURL版本)

<?php
// 读取或缓存代理配置
if (apcu_exists('proxy_config')) {
    $config = apcu_fetch('proxy_config');
    $proxy = $config['proxy'];
    $sessionCookie = $config['cookie'];
} else {
    $lines = file("info.txt", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
    if (!$lines || count($lines) < 2) {
        die("无法读取代理配置");
    }
    $proxy = $lines[0];
    $sessionCookie = $lines[1];
    apcu_store('proxy_config', ['proxy' => $proxy, 'cookie' => $sessionCookie], 3600);
}

// 处理请求参数
$n = str_replace("/num?", "", $_SERVER['REQUEST_URI']);
$apiUrl = "http://**********/$n";

// CURL请求API
$ch = curl_init($apiUrl);
curl_setopt_array($ch, [
    CURLOPT_PROXY => $proxy,
    CURLOPT_HTTPHEADER => ["Cookie: PHPSESSID=$sessionCookie"],
    CURLOPT_CONNECTTIMEOUT => 1,
    CURLOPT_TIMEOUT => 3,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_FOLLOWLOCATION => false,
    CURLOPT_SSL_VERIFYPEER => false,
    CURLOPT_SSL_VERIFYHOST => false
]);

$data = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

if ($data === false || $httpCode !== 200) {
    die("API请求失败: " . curl_error($ch));
}
curl_close($ch);

// 解码并跳转
$values = json_decode($data, true);
if (!is_array($values) || !isset($values['results']['otherurl'])) {
    die("无效的API响应");
}

header("Location: " . $values['results']['otherurl']);
exit;
?>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:52:29