exec()PHP命令失败但没有错误,但在命令提示符下工作(Magento 2)

时间:2017-10-04 22:11:53

标签: php exec magento2

我为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启动命令的区别是什么?

0 个答案:

没有答案