我为magento 2创建了一个自己的命令,它将所有产品数据导出到csv文件,该命令如下所示:
php -d memory_limit=1024M /home/myuser/public_html/myapp/bin/magento catalog:export catalog_product -f csv -e myserializedarray >> /home/myuser/public_html/myapp/log.txt 2>&1 &
此命令在命令提示符下完美运行,可以毫无问题地导出所有15000个产品。 当我在PHP中做同样的事情时:
exec("php -d memory_limit=1024M /home/myuser/public_html/myapp/bin/magento catalog:export catalog_product -f csv -e myserializedarray >> /home/myuser/public_html/myapp/log.txt 2>&1 &")
命令在几分钟后停止,始终位于不同的位置。我添加了一些日志语句,结果发现它在循环中间停止,从数据库中读取数据并将其写入文件。 Magento功能(核心):
public function export(){
//Execution time may be very long
set_time_limit(0);
$writer = $this->getWriter();
$page = 0;
while (true) {
++$this->page;
$entityCollection = $this->_getEntityCollection(true);
$entityCollection->setOrder('has_options', 'asc');
$entityCollection->setStoreId(Store::DEFAULT_STORE_ID);
$this->_prepareEntityCollection($entityCollection);
$this->paginateCollection($this->page, $this->getItemsPerPage());
if ($entityCollection->count() == 0) {
break;
}
$exportData = $this->getExportData();
if ($this->page == 1) {
$writer->setHeaderCols($this->_getHeaderColumns());
}
foreach ($exportData as $dataRow) {
$writer->writeRow($this->_customFieldsMapping($dataRow));
}
if ($entityCollection->getCurPage() >= $entityCollection->getLastPageNumber()) {
break;
}
}
return $writer->getContents();
}
命令提示符版本和通过Web启动的版本的用户是相同的。使用的路径是绝对的,因此也不应该成为问题。我还激活了错误日志记录,但没有写入消息。 shell_exec
也不起作用。
我错过了什么?函数本身必须正常工作,那么通过php启动命令的区别是什么?