我有大的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文件。
但它不适合大文件。
由于
答案 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)
显然你可以通过更改文件扩展名来重命名它,如果格式正确