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

如何从含URL的TXT文件获取文件大小并输出至单个TXT

我来帮你搞定这个需求!你已经有了获取远程文件大小的基础函数,只需要补充读取URL列表和写入结果文件的逻辑就行,以下是完整的实现方案:

完整实现方案

1. 完善远程文件大小获取函数

首先把你提供的函数补全,同时增加curl作为备用方案(有些服务器不支持get_headers获取Content-Length):

function getRemoteFilesize($url, $formatSize = true) {
    // 获取HTTP头并统一键名为小写
    $head = array_change_key_case(get_headers($url, 1));
    
    // 优先从Content-Length字段读取字节数
    $clen = isset($head['content-length']) ? $head['content-length'] : 0;
    
    // 如果获取不到,用curl发送HEAD请求重试
    if ($clen == 0) {
        $ch = curl_init($url);
        curl_setopt($ch, CURLOPT_NOBODY, true); // 只请求头信息
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_TIMEOUT, 10); // 设置超时时间,避免卡住
        curl_exec($ch);
        $clen = curl_getinfo($ch, CURLINFO_CONTENT_LENGTH_DOWNLOAD);
        curl_close($ch);
    }
    
    // 仍无法获取则返回-1
    if ($clen == 0) {
        return -1;
    }
    
    // 格式化大小为易读格式(如KB/MB)
    if ($formatSize) {
        $units = ['B', 'KB', 'MB', 'GB', 'TB'];
        $bytes = $clen;
        $i = 0;
        while ($bytes >= 1024 && $i < count($units) - 1) {
            $bytes /= 1024;
            $i++;
        }
        return round($bytes, 2) . ' ' . $units[$i];
    }
    
    // 返回原始字节数
    return $clen;
}

2. 主逻辑:读取URL列表并写入结果

接下来编写核心流程,读取存放URL的TXT文件,逐个处理后把结果写入新的TXT:

// 配置文件路径,按需修改
$urlListPath = 'urls.txt';   // 你的URL列表文件,每行一个URL
$resultFilePath = 'file_sizes.txt'; // 输出结果的文件

// 检查URL列表文件是否存在
if (!file_exists($urlListPath)) {
    die("错误:找不到URL列表文件 $urlListPath !");
}

// 打开结果文件准备写入('w'表示覆盖原有内容,要追加用'a')
$resultHandle = fopen($resultFilePath, 'w');
if (!$resultHandle) {
    die("错误:无法打开结果文件 $resultFilePath 进行写入!");
}

// 读取URL列表,忽略空行和换行符
$urls = file($urlListPath, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

// 循环处理每个URL
foreach ($urls as $url) {
    $url = trim($url);
    if (empty($url)) continue;
    
    // 获取文件大小
    $size = getRemoteFilesize($url);
    
    // 构造结果行
    $resultLine = $size == -1 
        ? "$url -> 无法获取文件大小\n" 
        : "$url -> $size\n";
    
    // 写入结果文件
    fwrite($resultHandle, $resultLine);
    // 实时打印到控制台(可选,方便查看进度)
    echo $resultLine;
}

// 关闭文件句柄
fclose($resultHandle);
echo "处理完成!结果已保存到 $resultFilePath";

3. 使用步骤

  • 把你的URL列表保存为urls.txt,每行一个URL,和PHP脚本放在同一目录
  • 运行脚本,结果会自动写入file_sizes.txt,格式为[URL] -> [文件大小/无法获取]

注意事项

  • 确保你的PHP环境开启了allow_url_fopen(用于get_headers)和curl扩展
  • 部分服务器会隐藏Content-Length或拒绝HEAD请求,这类URL会显示“无法获取文件大小”
  • 如果需要处理大量URL,建议增加请求间隔(比如sleep(1);),避免被服务器封禁

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:11:24