php写入文件-文件变大(优化文件大小或其他方法)

php写入文件-文件变大(优化文件大小或其他方法),php,Php,我想用DB(mysql)中的产品创建一个提要(.txt文件) 提要文件中的每一行应如下所示: 产品代码|类别|品牌|价格|。。。和其他8列 我使用的代码: $feedFile = fopen(APP_PATH."external_feed.txt", "w") or die("Unable to open file!"); $feedRow = ''; $s = '|'; ini_set('max_execution_time', 300); while ($row = $mp->get

我想用DB(mysql)中的产品创建一个提要(.txt文件)

提要文件中的每一行应如下所示: 产品代码|类别|品牌|价格|。。。和其他8列

我使用的代码:

$feedFile = fopen(APP_PATH."external_feed.txt", "w") or die("Unable to open file!");
$feedRow = ''; 
$s = '|';
ini_set('max_execution_time', 300);
while ($row = $mp->getRows()) {
    $feedRow = $feedRow .$row['ClientCode'].
        $s.$row['CategoryName'].
        $s.$row['Brand'].
        $s.$row['Name'].
        $s.$row['Price'].
        $s."in stock".
        $s."free shipping".
        $s."no warranty".
        $s.$url_to_product.
        $s.$url_to_image.
        $s.$row['Description']."\n";
    fwrite($feedFile, $feedRow);
}
fclose($feedFile);
在使用2275个产品完成文件写入后,该文件的大小为12GB


是否有更好的方法将大数据写入文件?或者如何优化文件写入以使其变小?

您正在while循环中连接
$feedRow
。这将一次又一次地追加上一行

在while循环中将
$feedRow
初始化为空

while ($row = $mp->getRows()) {
    $feedRow = '';
    ...
}

您正在while循环中连接
$feedRow
。这将一次又一次地追加上一行

在while循环中将
$feedRow
初始化为空

while ($row = $mp->getRows()) {
    $feedRow = '';
    ...
}

12GB似乎对于只有2275种产品来说太大了。我的假设是你写的比你想象的要多。几年前,我创建了一个导出功能,它以类似的方式导出数十万行代码(用于产品)。它有72列。这些文件的大小在150MB范围内。检查输出。如果有12GB的数据,则有12GB的数据。然后可以应用常规压缩算法(gzip、zip、bzip2等)来减小物理文件大小。您确定数据实际上是12GB吗?对于2275种产品来说,这听起来似乎太多了。另外-
fputcsv
是您的朋友。12GB似乎对于2275种产品来说太大了。我的假设是你写的比你想象的要多。几年前,我创建了一个导出功能,它以类似的方式导出数十万行代码(用于产品)。它有72列。这些文件的大小在150MB范围内。检查输出。如果有12GB的数据,则有12GB的数据。然后可以应用常规压缩算法(gzip、zip、bzip2等)来减小物理文件大小。您确定数据实际上是12GB吗?对于2275种产品来说,这听起来似乎太多了。另外-
fputcsv
是你的朋友。或者使用
fgetcsv
,它是用来将分隔的值写入文件的。@MatsLindh我想它的
fputcsv
?是的,可以用
fputcsv
完成。尝试以最简单的形式回答,而不需要对现有代码进行太多更改:)。您是对的@Samir。。。我看到了。我有$feedRow='';暂时停止:)现在该文件有10MB…但我认为某个地方有一个bug。。。我应该在文件中输入2275行,得到5490行……或者使用
fgetcsv
,它是用来将分隔的值写入文件的。@MatsLindh我想它的
fputcsv
?是的,可以用
fputcsv
完成。尝试以最简单的形式回答,而不需要对现有代码进行太多更改:)。您是对的@Samir。。。我看到了。我有$feedRow='';暂时停止:)现在该文件有10MB…但我认为某个地方有一个bug。。。我应该在文件2275行,我得到5490行。。。