Измените getdata на CURL или веб-адрес

У меня есть следующий скрипт, который творит чудеса с моим обновлением акций, однако мне бы хотелось, чтобы он работал с удаленным URL-адресом без совместного доступа к основному серверу Magento.

Скрипт здесь:

<?php

$mageFilename = 'app/Mage.php';
require_once $mageFilename;
Mage::setIsDeveloperMode(true);
ini_set('display_errors', 1);
umask(0);
Mage::app('admin');
Mage::register('isSecureArea', 1);
Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);

set_time_limit(0);
ini_set('memory_limit','1024M');
function _getConnection($type = 'core_read'){
    return Mage::getSingleton('core/resource')->getConnection($type);
}

function _getTableName($tableName){
    return Mage::getSingleton('core/resource')->getTableName($tableName);
}

function _getAttributeId($attribute_code = 'price'){
    $connection = _getConnection('core_read');
    $sql = "SELECT attribute_id
                FROM " . _getTableName('eav_attribute') . "
            WHERE
                entity_type_id = ?
                AND attribute_code = ?";
    $entity_type_id = _getEntityTypeId();
    return $connection->fetchOne($sql, array($entity_type_id, $attribute_code));
}

function _getEntityTypeId($entity_type_code = 'catalog_product'){
    $connection = _getConnection('core_read');
    $sql        = "SELECT entity_type_id FROM " . _getTableName('eav_entity_type') . " WHERE entity_type_code = ?";
    return $connection->fetchOne($sql, array($entity_type_code));
}

function _checkIfSkuExists($sku){
    $connection = _getConnection('core_read');
    $sql        = "SELECT COUNT(*) AS count_no FROM " . _getTableName('catalog_product_entity') . " WHERE sku = ?";
    $count      = $connection->fetchOne($sql, array($sku));
    if ($count > 0){
        return true;
    }else{
        return false;
    }
}

function _getIdFromSku($sku){
    $connection = _getConnection('core_read');
    $sql        = "SELECT entity_id FROM " . _getTableName('catalog_product_entity') . " WHERE sku = ?";
    return $connection->fetchOne($sql, array($sku));
}

function _updateStocks($data){
    $connection     = _getConnection('core_write');
    $sku            = $data[0];
    $newQty         = $data[1];
    $productId      = _getIdFromSku($sku);
    $attributeId    = _getAttributeId();

    $sql            = "UPDATE " . _getTableName('cataloginventory_stock_item') . " csi,
                       " . _getTableName('cataloginventory_stock_status') . " css
                       SET
                       csi.qty = ?,
                       csi.is_in_stock = ?,
                       css.qty = ?,
                       css.stock_status = ?
                       WHERE
                       csi.product_id = ?
                       AND csi.product_id = css.product_id";
    $isInStock      = $newQty > 0 ? 1 : 0;
    $stockStatus    = $newQty > 0 ? 1 : 0;
    $connection->query($sql, array($newQty, $isInStock, $newQty, $stockStatus, $productId));
}
/***************** UTILITY FUNCTIONS ********************/

$csv                = new Varien_File_Csv();
$data               = $csv->getData('/var/www/html/var/import/updateStockLevels.csv'); //path to csv
array_shift($data);

$message = '';
$count   = 1;
foreach($data as $_data){
    if (_checkIfSkuExists($_data[0])){
        try{
            _updateStocks($_data);
            $message .= $count . '> Success:: Qty (' . $_data[1] . ') of Sku (' . $_data[0] . ') has been updated. <br />';

        }catch(Exception $e){
            $message .=  $count .'> Error:: while Upating  Qty (' . $_data[1] . ') of Sku (' . $_data[0] . ') => '.$e->getMessage().'<br />';
        }
    }else{
        $message .=  $count .'> Error:: Product with Sku (' . $_data[0] . ') does\'t exist.<br />';
    }
    $count++;
}
echo $message;

?>

Можно ли это изменить, чтобы вытащить файл из CURL или что-то в этом роде как фиксированный URL-адрес, откуда получить файл CSV? Мы будем благодарны за помощь экспертов. Спасибо

[ссылка] stackoverflow.com/questions/26348007/…

Jamie_D 14.09.2018 13:48

Спасибо @Jamie_D - но как я могу реализовать это в моем текущем скрипте?

David 14.09.2018 14:10

См. Обновленный ответ

Jamie_D 14.09.2018 14:22

Технически вам действительно следует расширить класс Magento Varien_File_Csv и переопределить функцию получить данные, но это выходит за рамки вашего вопроса.

Jamie_D 14.09.2018 14:30
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
4
55
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Начните с замены следующих строк в ваших служебных функциях:

$csv = new Varien_File_Csv();
$data = $csv->getData('/var/www/html/var/import/updateStockLevels.csv');
array_shift($data);

С участием:

$csvData = "http://www.yoururl.com/updateStockLevels.csv";
$fileData = fopen($csvData,'r');
while (($line = fgetcsv($fileData)) !== FALSE) {
    $data[] = $line;
}
array_shift($data);

Спасибо, но получаю: Неустранимая ошибка: неперехваченное исключение «Исключение» с сообщением «Примечание: неопределенная переменная: файл в /var/www/html/stockimport.php в строке 86» в / var / www / html / app / code / core / Mage / Core / functions.php: 245 Трассировка стека: # 0 /var/www/html/stockimport.php(86): mageCoreErrorHandler (8, 'Undefined varia ...', '/ var / www / html / s ... ', 86, Array) # 1 {main} добавлено в /var/www/html/app/code/core/Mage/Core/functions.php в строке 245

David 14.09.2018 14:25

Извините за это ... см. Обновленный ответ ... должен быть $fileData = fopen($csvData,'r');

Jamie_D 14.09.2018 14:34

@ Дэвид Приятно слышать!

Jamie_D 15.09.2018 16:31

Другие вопросы по теме