php写入文件-文件变大(优化文件大小或其他方法)
我想用DB(mysql)中的产品创建一个提要(.txt文件) 提要文件中的每一行应如下所示: 产品代码|类别|品牌|价格|。。。和其他8列 我使用的代码: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
$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行。。。