PHP如何将大型txt文件转换为csv并强制下载

时间:2014-01-03 17:04:51

标签: php csv

我有大的txt文件(1GB),允许用户下载2种格式,TXT和CSV

我创建了download.php文件。

$file = $_GET['file'];
$type= $_GET['type'];
$pathfile = "/some/path/".$file.".txt";
$isifile = file_get_contents($pathfile);
    if($type == "TXT"){
        header('Content-disposition: attachment; filename="'.$file.'.txt"');
        header('Content-type: text/plain');
        echo $isifile;
    }else if($type == "CSV"){
        $arr_file = explode("\n", $isifile); //will die here because array need large memory
        header("Content-type: application/csv");
        header("Content-Disposition: attachment; filename=".$file.".csv");
        foreach($arr_file as $wd ){
            echo $wd;
        }
    }

该代码适用于小型txt文件。

但它不适合大文件。

由于

2 个答案:

答案 0 :(得分:1)

PHP有一个名为readfile的函数,它将文件的内容回显到输出缓冲区,而不会同时将整个文件加载到内存中 - 您应该将其用于TXT变体而不是file_get_contents / echo。

对于CSV版本,您应该使用fopen打开文件,然后使用fgets逐行读取它,并将转换后的内容回显到输出缓冲区。代码可能看起来像这样......

$fileObj = fopen( $pathfile, "rt" );
while ( ( $line = fgets( $fileObj ) ) ) // by default this will read one line at a time
{
    //  If you need to do anything to transform this data to CSV format, convert each line here.
    echo $line;
}

请接受我的哀悼,因为你的问题措辞不当可能会收到你的誓言。

答案 1 :(得分:0)

https://superuser.com/questions/581702/how-can-i-convert-a-txt-file-to-csv-format-without-using-excel

显然你可以通过更改文件扩展名来重命名它,如果格式正确