用php拆分一个大的txt文件
我有一个大的txt文件(84mb),超过100万行 我想把它分割成单独的50k行文件。我怎么做?我在网上搜索了一下,但什么也没找到用php拆分一个大的txt文件,php,split,Php,Split,我有一个大的txt文件(84mb),超过100万行 我想把它分割成单独的50k行文件。我怎么做?我在网上搜索了一下,但什么也没找到 <?php $handle = @fopen("/tmp/inputfile.txt", "r"); $maxLines = 50; if ($handle) { $counter = 1; $fileCount = 1; $data = array(); while (($buffer = fgets($handle, 4
<?php
$handle = @fopen("/tmp/inputfile.txt", "r");
$maxLines = 50;
if ($handle) {
$counter = 1;
$fileCount = 1;
$data = array();
while (($buffer = fgets($handle, 4096)) !== false) {
$data[] = $buffer;
if(count($data) % $maxLines == 0) {
file_put_contents("filename{$fileCount}.txt", implode("\n\r", $data));
$data = array();
$fileCount++;
}
$counter++;
}
if (!feof($handle)) {
echo "Error: unexpected fgets() fail\n";
}
fclose($handle);
}
?>
类似的方法应该可以工作,尽管我永远不会推荐它,但这不是解决问题的好方法。这是我的脚本的一个修改版本,位于: 用法 功能
这个问题以前已经回答过了。。。我想你应该看看@Baba,我检查了答案,但它对我没有帮助。是什么让它与你想要的不同…为什么要在
4096
处设置上限行?只需去掉param,它将处理任意长度的行。另外,设置$maxLines=50000
而不是50
。这将丢弃文件末尾的所有“奇数”行。在之外添加另一个输出文件写入,而。
set_time_limit(0);
// Split by Byte
splitData("b.php", __DIR__ . "/test", 1024 * 50); //Split 50Kb
// Split By line
splitLine("b.php", __DIR__ . "/test", 50000);
function splitData($filename, $destination, $chunkSize) {
$pathInfo = pathinfo($filename);
$handle = fopen($filename, 'rb');
$counter = 0;
if ($handle === false) {
return false;
}
while ( ! feof($handle) ) {
$counter ++;
$filePart = $destination . DIRECTORY_SEPARATOR . $pathInfo['filename'] . "_" . $counter . "." . $pathInfo['extension'];
touch($filePart);
file_put_contents($filePart, fread($handle, $chunkSize));
}
$status = fclose($handle);
return $status;
}
function splitLine($filename, $destination, $lineSize) {
$pathInfo = pathinfo($filename);
$handle = fopen($filename, 'rb');
$counter = 0;
$splitCount = 0;
if ($handle === false) {
return false;
}
$content = "";
while ( ($buffer = fgets($handle, 4096)) !== false ) {
$content .= $buffer;
$counter ++;
if ($counter >= $lineSize) {
$splitCount ++;
$filePart = $destination . DIRECTORY_SEPARATOR . $pathInfo['filename'] . "_" . $splitCount . "." . $pathInfo['extension'];
touch($filePart);
file_put_contents($filePart, $content);
$content = "";
$counter = 0;
}
}
$status = fclose($handle);
return $status;
}