AvS_FastSimpleImport icon indicating copy to clipboard operation
AvS_FastSimpleImport copied to clipboard

Shell importing products with images does not work with PHP7

Open peterjaap opened this issue 8 years ago • 5 comments

When running M1 on PHP7 and using Inchoo_PHP7 extension to fix the bugs, the shell importer breaks when importing products with images.

This is because this extension does not use the Magento getModel command to get the Mage_ImportExport_Model_Import_Uploader class, but references it directly, therefor skipping the Inchoo_PHP7 rewrite to fix the class for PHP7;

https://github.com/avstudnitz/AvS_FastSimpleImport/blob/master/src/app/code/community/AvS/FastSimpleImport/Model/Import/Entity/Product.php#L1349 https://github.com/avstudnitz/AvS_FastSimpleImport/blob/master/src/app/code/community/AvS/FastSimpleImport/Model/Import/Entity/Category.php#L667

peterjaap avatar Apr 22 '16 09:04 peterjaap

@peterjaap This is required, it was already attemted (https://github.com/avstudnitz/AvS_FastSimpleImport/commit/f29edebe5c48d2c67848227f049e6fbb37ac886c ), but is reverted: (https://github.com/avstudnitz/AvS_FastSimpleImport/commit/2ab2f535439bc5ac8799e2608d0c37d27f41d2ea)

This is because getModel assumes the argument of the constructor is an array, but that wont work for the mentioned class. Consider it a corebug ;)

paales avatar Apr 22 '16 09:04 paales

So maybe rewrite the Mage_ImportExport_Model_Import_Uploader to a class in this extension, add the PHP7 fix and change the _setUploadFile function from;

    protected function _setUploadFile($filePath)
    {
        if (!is_readable($filePath)) {
            Mage::throwException("File '{$filePath}' was not found or has read restriction.");
        }
        $this->_file = $this->_readFileInfo($filePath);

        $this->_validateFile();
    }

to

    protected function _setUploadFile($filePath)
    {
        if($filePath === null) {
            return;
        }
        if (!is_readable($filePath)) {
            Mage::throwException("File '{$filePath}' was not found or has read restriction.");
        }
        $this->_file = $this->_readFileInfo($filePath);

        $this->_validateFile();
    }

?

peterjaap avatar Apr 22 '16 09:04 peterjaap

@peterjaap I'd rather not rewrite this file if not necessary, what PHP7 bug are you running into, could you post a stack trace.

paales avatar Apr 22 '16 09:04 paales

It's the curly brackets fix on this line; https://github.com/Inchoo/Inchoo_PHP7/blob/master/app/code/local/Inchoo/PHP7/Model/Import/Uploader.php#L25

peterjaap avatar Apr 22 '16 09:04 peterjaap

@paales: if you pass null as the second param, would that fix the constructor problem?

$this->_fileUploader = Mage::getModel("importexport/import_uploader", null);

They also fixed it like that in the Inchoo_PHP7 module, so I assume it works: https://github.com/Inchoo/Inchoo_PHP7/blob/82cfec98fb1461c16069261fef98c4edf1d821db/app/code/local/Inchoo/PHP7/Model/Import/Entity/Product.php#L16 (this was done a couple of months after @peterjaap opened this issue btw)

hostep avatar Sep 27 '16 12:09 hostep