如何从含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
相关产品推荐
相关产品推荐

