我正在努力创建一个 PHP 脚本,以帮助根据行数将大文本文件拆分为多个较小的文件。我需要增加分割的选项,所以它从第一个文件的 10 行开始,第二个文件的 20 行等等。
小智 5
这是我的脚本中的一个函数:
<?php
/**
*
* Split large files into smaller ones
* @param string $source Source file
* @param string $targetpath Target directory for saving files
* @param int $lines Number of lines to split
* @return void
*/
function split_file($source, $targetpath='./logs/', $lines=10){
$i=0;
$j=1;
$date = date("m-d-y");
$buffer='';
$handle = @fopen ($source, "r");
while (!feof ($handle)) {
$buffer .= @fgets($handle, 4096);
$i++;
if ($i >= $lines) {
$fname = $targetpath.".part_".$date.$j.".log";
if (!$fhandle = @fopen($fname, 'w')) {
echo "Cannot open file ($fname)";
exit;
}
if (!@fwrite($fhandle, $buffer)) {
echo "Cannot write to file ($fname)";
exit;
}
fclose($fhandle);
$j++;
$buffer='';
$i=0;
$line+=10; // add 10 to $lines after each iteration. Modify this line as required
}
}
fclose ($handle);
}
?>
Run Code Online (Sandbox Code Playgroud)
它应该是一个评论,但我还不能评论。AndyDeGroo 的答案是错误的。它不会写入文件的最后几行,或者低于 10 行时不会保存文件。文件还应该在 while() 循环之后保存以写入文件的其余部分。固定功能应该如下所示:
<?php
/**
*
* Split large files into smaller ones
* @param string $source Source file
* @param string $targetpath Target directory for saving files
* @param int $lines Number of lines to split
* @return void
*/
function split_file($source, $targetpath='./logs/', $lines=10){
$i=0;
$j=1;
$date = date("m-d-y");
$buffer='';
$handle = @fopen ($source, "r");
while (!feof ($handle)) {
$buffer .= @fgets($handle, 4096);
$i++;
if ($i >= $lines) {
$fname = $targetpath.".part_".$date.$j.".log";
saveToFile($buffer, $fname);
$j++;
$i=0;
}
}
$fname = $targetpath.".part_".$date.$j.".log";
saveToFile($buffer, $fname);
fclose ($handle);
}
function saveToFile(&$buffer, $fname)
{
if (!$fhandle = @fopen($fname, 'w')) {
echo "Cannot open file ($fname)";
exit;
}
if (!@fwrite($fhandle, $buffer)) {
echo "Cannot write to file ($fname)";
exit;
}
fclose($fhandle);
$buffer = '';
}
?>
Run Code Online (Sandbox Code Playgroud)
附言。我删除了“$line”变量,因为它没有在任何地方使用。
归档时间: |
|
查看次数: |
11352 次 |
最近记录: |