将大型文本文件拆分为多个文件的PHP脚本
我正在努力创建一个PHP脚本,以帮助根据行数将一个大文本文件拆分为多个小文件。我需要增加拆分的选项,因此第一个文件从10行开始,第二个文件从20行开始,依此类推。我的脚本中有一个函数:将大型文本文件拆分为多个文件的PHP脚本,php,Php,我正在努力创建一个PHP脚本,以帮助根据行数将一个大文本文件拆分为多个小文件。我需要增加拆分的选项,因此第一个文件从10行开始,第二个文件从20行开始,依此类推。我的脚本中有一个函数: <?php /** * * Split large files into smaller ones * @param string $source Source file * @param string $targetpath Target directory for saving files *
<?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);
}
?>
以下是我的脚本中的一个函数:
<?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);
}
?>
嗯,你不需要包括文件的最后一部分吗? 如果$I>=$line,我想替换{
使用if$i>=$lines | | feof$handle{Hmm。您不需要包括文件的最后一部分吗?
$handle = fopen('source/file/path','r');
$f = 1; //new file number
while(!feof($handle))
{
$newfile = fopen('new/file/path'.$f.'.txt','w'); //create new file to write to with file number
for($i = 1; $i <= 5000; $i++) //for 5000 lines
{
$import = fgets($handle);
//print_r($import);
fwrite($newfile,$import);
if(feof($handle))
{break;} //If file ends, break loop
}
fclose($newfile);
$f++; //Increment newfile number
}
fclose($handle);
如果$I>=$line,我想替换{
如果使用if$i>=$lines | | feof$handle{,它应该是一个注释,但我还不能注释。AndyDeGroo的答案是错误的。它不会写入文件的最后几行,或者在低于10行时不会保存文件。文件也应该在while循环后保存,以写入文件的其余部分。修复函数应该如下所示:
$handle = fopen('source/file/path','r');
$f = 1; //new file number
while(!feof($handle))
{
$newfile = fopen('new/file/path'.$f.'.txt','w'); //create new file to write to with file number
for($i = 1; $i <= 5000; $i++) //for 5000 lines
{
$import = fgets($handle);
//print_r($import);
fwrite($newfile,$import);
if(feof($handle))
{break;} //If file ends, break loop
}
fclose($newfile);
$f++; //Increment newfile number
}
fclose($handle);
<?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 = '';
}
?>
另外,我删除了$line变量,因为它没有在任何地方使用。它应该是一个注释,但我还不能注释。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 = '';
}
?>
另外,我删除了$line变量,因为它没有在任何地方使用。到目前为止,你得到了什么?你当前的代码呈现的确切问题是什么?这听起来有点像一个奇怪的问题,实际上可能是一个作业或考试问题。到目前为止,你得到了什么?你当前的代码呈现的确切问题是什么?这听起来有点奇怪这是一道奇怪的问题,实际上可能是作业或考试题。