2013-01-10 21 views
1

我有一个相对较小的商店,约20k skus所有简单的产品。我使用的是magento 1.7.2,但所有旧版本都有相同的问题。我根本无法将我的产品导出为CSV格式。直接从magento后端的数据流配置文件运行时出现内存不足,而在从shell运行时出现相同的错误。Magento甚至通过SSH输出内存不足

Fatal error: Allowed memory size of 536870912 bytes exhausted (tried to allocate 71 bytes) in /home/public_html/app/code/core/Mage/Eav/Model/Entity/Attribute/Source/Table.php on line 62 

我增加了magentos htaccess的内存限制和执行时间到512M,magentos的php.ini到512M和我的VPS PHP配置INI为512MB。它仍然在大约4分钟内燃烧并耗尽内存。

我很困惑,我的整个数据库(压缩)只有28mb!我错过了什么让magento导出所有产品功能的工作?

+0

你试过'output_buffering'吗? – Sahal

回答

3

Magento数据流确实倾向于使用海量存储器,难以在大型商店出口。对于具有大型产品目录的商店,编写脚本通常可以更快更轻松地从数据库直接导出,而不是通过数据流导出。

+0

是的,如果您使用product_flat设置并导出catalog_product_flat_x表(作为提示),那么我认为您的数据非常正确? –

0

这可能与您的问题.htaccess文件不覆盖全局设置在php.ini中的memory_limit设置。

其他选项设置为memory_limit无限制在您index.php进行测试。然后你会知道.htaccess中的变化是否没有受到影响。

+1

然而,错误显示正确的最大记忆值。 – dualed

+0

你给memory_limit加了'-1'吗? – Sahal

0

我解决了这个问题,通过导出500,1000或一次性导入(使用自定义导出脚本)。

我做了一个文件,收到参数$ start和$ productsToExport。该文件采取了产品的集合,然后使用

LIMIT ($start-1)*$productsToExport, $productsToExport 

此脚本只返回导出的产品数量。

我做了第二个主脚本,它用参数$ start = 0,$ productsToExport = 500对第一个文件做了递归AJAX。当AJAX完成时,它与$ start = 1一样,等等,直到没有产品被留下。

这样做的好处是它不会超载服务器(一个ajax只有在完成之前才运行) - 并且如果发生错误,脚本将继续。此外,thememory_limit和max_execution_time是一个

0

如果通过20k skus你的意思是20.000那么这是完全可能的。不幸的是,出口非常渴望记忆。在这种情况下,我总是将memory_limit增加到2000M,然后创建文件需要一段时间,但最终会成功。