将大型文本文件拆分为多个文件的PHP脚本

将大型文本文件拆分为多个文件的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脚本,以帮助根据行数将一个大文本文件拆分为多个小文件。我需要增加拆分的选项,因此第一个文件从10行开始,第二个文件从20行开始,依此类推。

我的脚本中有一个函数:

<?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变量,因为它没有在任何地方使用。

到目前为止,你得到了什么?你当前的代码呈现的确切问题是什么?这听起来有点像一个奇怪的问题,实际上可能是一个作业或考试问题。到目前为止,你得到了什么?你当前的代码呈现的确切问题是什么?这听起来有点奇怪这是一道奇怪的问题,实际上可能是作业或考试题。