我有一个相对较小的商店,大约20k skus所有简单的产品。我正在使用magento 1.7.2,但所有旧版本都有同样的问题。我根本无法将我的产品导出为CSV。直接从magento后端的数据流配置文件运行时内存不足,从shell运行时出现相同的错误。
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
我将magent的htaccess内存限制和执行时间增加到512m,magentos php.ini增加到512m,我的VPS php配置ini增加到512mb。它仍然会在大约4分钟内烧毁它并且耗尽内存。
我很困惑,我的整个数据库(压缩)只有28mb!我缺少什么使magento导出所有产品功能?
答案 0 :(得分:3)
Magento数据流确实倾向于使用大量内存,这使得大型商店的出口变得困难。对于具有大型产品目录的商店,通常可以更快更轻松地编写脚本以直接从数据库导出而不是通过数据流。
答案 1 :(得分:0)
这可能是您的.htaccess
文件未覆盖memory_limit
中全局设置的php.ini
设置的问题。
其他选项在您memory_limit
中设置为index.php
无限制以进行测试。然后你会知道.htaccess的变化是否没有受到影响。
答案 2 :(得分:0)
我通过导出500,1000或一次我想要的数量(使用自定义导出脚本)解决了这个问题。
我制作了一个以参数$ start和$ productsToExport收到的文件。该文件收集了产品,然后使用
LIMIT ($start-1)*$productsToExport, $productsToExport
此脚本仅返回导出的产品数。
我制作了第二个主脚本,它使用参数$ start = 0,$ productsToExport = 500对第一个文件执行递归AJAX。当AJAX完成时,它使用$ start = 1执行相同操作,并且等等,直到没有剩下产品为止。
这样做的好处是它不会使服务器过载(只有在前一个完成后才运行一个ajax) - 如果发生错误,脚本会继续运行。另外thememory_limit和max_execution_time是sa
答案 3 :(得分:0)
如果用20k skus你的意思是20.000那么这是完全可能的。不幸的是,出口非常渴望记忆。在这种情况下,我总是将memory_limit增加到2000M,然后创建文件需要一段时间,但最终会成功。