Import produktów XML zdjecia

0

Witam,

mam taki problem w trakcie pobierania produktów w sklepie po xml występuje taki błąd w logach:

PHP Error no: 1024 Can not get/write image http://www.b2btrade.eu/Content/ProductsImage/5730.jpg from trade error type: corupted File: /home/public_html/admin/admin_ inc/class_import.php Line: 2807

problem polega tylko na pobieraniu zdjęć reszta jest ok, link ze zdjęciami jest prawidłowy, zdjęcia się wyświetlają.

poniżej wycinek kodu odpowiedniego do pobierania zdjęć:

$prod->$i->images = array();
if(is_object($v->zdjecia->zdjecie)) {
foreach($v->zdjecia->zdjecie as $photo) {
$prod->$i->images[] = trim(tostr($photo));
}
} elseif(!empty($v->zdjecia->zdjecie)) {
$prod->$i->images[] = trim(tostr($v->zdjecia->zdjecie));
}
$prod->$i->images = array_filter($prod->$i->images);
$i++;

i wycinek pliku XML skąd ma pobierać:

<?xml version="1.0" encoding="utf-8"?>
<zdjecia><zdjecie>http://www.b2btrade.eu/Content/ProductsImage/5730.jpg
</zdjecie><zdjecie>http://www.b2btrade.eu/Content/ProductsImage/5731.jpg
</zdjecie><zdjecie>http://www.b2btrade.eu/Content/ProductsImage/5732.jpg
</zdjecie><zdjecie>http://www.b2btrade.eu/Content/ProductsImage/5733.jpg
</zdjecie></zdjecia>

Dziękuje za pomoc

Pozdrawiam,
Marek

0

Czym pobierasz zdjęcia ?

0
PiDev napisał(a):

Czym pobierasz zdjęcia ?
Program do integracji mam w sklepie juz dodany mam tylko dostęp do jego źródła czyli napisany jest w php, podaje link do xml i na takiej podstawie jest dodawany do komórek w sklepie, zródło główne do importu poniżej:

<?php

class Import extends Products
{
var $conf_name = 'b2btrade';
var $conf_lang = 'pl';
//var $conf_fileaddr = "http://www.b2btrade.pl/pobierzOferte.aspx?user=XML_UNIWERSALNYN";
var $conf_fileaddr = '#CONF_LINK#';
var $conf_no_update_options = true;
//var $conf_required_fields = array('login', 'clientID', 'password');
//var $conf_fields_info = array('login' => 'Firma', 'clientID' => 'Pracownik', 'password'=> 'Hasło dostępu');
var $conf_required_fields = array('link');
var $conf_fields_info = array('link' => 'Link do pliku XML hurtowni Forcetop/b2btrade. W celu otrzymania bezpośredniego linka, trzeba skontaktować się z technikami hurtowni pod adresem e-mail: [email protected]. W treści należy zaznaczyć, iż potrzebujemy dostęp do pliku XML UniwersalnyN, którego pobranie nie wymaga logowania do Pulpitu Kontrahenta.');
var $conf_type = 'xml';
var $conf_prices = 'netto';
var $conf_retail = true;
var $conf_decimal_sep = ',';
var $conf_field_key = 'prod_symbol_int';
var $conf_unit_if_empty = 'szt.';
/* var $conf_login_data = array(
'url' => 'http://www.b2btrade.eu/PK/Login.aspx',
'ctl00$ContentPlaceHolder1$kntLogowania$Login1$UserName' => '#CONF_LOGIN#',
'ctl00$ContentPlaceHolder1$kntLogowania$Login1$DanePracownika' => '#CONF_ID#',
'ctl00$ContentPlaceHolder1$kntLogowania$Login1$Password' => '#CONF_PASSWORD#',
'ctl00$ContentPlaceHolder1$kntLogowania$Login1$LoginButton' => 'Zaloguj+si%C4%99',
'__VIEWSTATE' => '/wEPaA8FDzhkMGZhMGY5OWNkZWI3ZWSaBV1/ux7P84TyQNStYeTzyGTuw7DjGAKSnG3L3v3DNg==',
'__EVENTARGUMENT' => '',
'__EVENTTARGET' => '',
'__SCROLLPOSITIONX' => 0,
'__SCROLLPOSITIONY' => 0
);*/

function convert_to_options($arr)
{
    $options = array();
    foreach($arr as $k => $v) {
        $options[] = array(
            'name'  => $v['n'],
            'value' => sshop_ucfirst($v['v']),
            'type'  => 'info',
        );
    }
    return json_encode($options);
}

function cleanCats($cat)
{
    $cat = strtr(
        $cat, array(
            "IPAD 2/3/4"    => "IPAD 2,3,4/",
            "iPad 2 / 3/ 4" => "iPad 2,3,4/",
            "IPHONE 4 / 4S" => "IPHONE 4,4S/",
            "iPhone 4/4S"   => "iPhone 4,4S/",
            "IPHONE 5 / 5S" => "IPHONE 5,5S/"
        )
    );
    $cat = str_replace(' / ', ',', $cat);
    return rtrim(str_replace('//', '/', $cat), '/');
}

function conf_parse_file($xml, $cache_json)
{
    $i=0;
    $prod = new stdClass();
    foreach($xml->produkt as $k => $v) {
        $opt=array();
        $prod->$i    = new stdClass();
        $prod->$i->kod = tostr($v->kod);
        $prod->$i->nazwa = tostr($v->nazwa);
        $prod->$i->kod_kreskowy = tostr($v->kod_kreskowy);
        $prod->$i->marka = tostr($v->marka);
        $prod->$i->opis = tostr($v->opis);
        $prod->$i->stan = tostr($v->stan);
        $prod->$i->vat = intval($v->vat);
        $prod->$i->cena = tostr($v->cena_netto);
        $prod->$i->cenasrp = tostr($v->cenasrp_netto);

        $prod->$i->cat = $this->cleanCats(tostr($v->kategorie->kategoria->{0}));

        if(!empty($v->atrybuty)){
            foreach($v->atrybuty->atrybut as $value){
                $opt[] = array('n'=>tostr($value->attributes()->name),'v'=>tostr($value));
            }
        }
        $prod->$i->options = $this->convert_to_options($opt);

        $prod->$i->images = array();
        if(is_object($v->zdjecia->zdjecie)) {
            foreach($v->zdjecia->zdjecie as $photo) {
                $prod->$i->images[] = trim(tostr($photo));
            }
        } elseif(!empty($v->zdjecia->zdjecie)) {
            $prod->$i->images[] = trim(tostr($v->zdjecia->zdjecie));
        }
        $prod->$i->images = array_filter($prod->$i->images);
        $i++; 
    }
    unset($xml);

    $struct = array(
        'products_path'		=> $prod,

        'fields' => array(
            'prod_symbol_int'	=> 'kod',
            'prod_name_pl'		=> 'nazwa',
            'prod_cat'			=> 'cat',
            'prod_price'		=> 'cena',
            'prod_price_retail'		=> 'cenasrp',
            'prod_symbol'		=> 'kod',
            'prod_desclong_pl'	=> 'opis',
            'prod_amount'		=> 'stan',
            'prod_producer'		=> 'marka',
            'prod_barcode'		=> 'kod_kreskowy'
        ),
    );
    return $struct;
}

function conf_handle_category($row)
{
    return array(
        'cats_names'		=> (!empty($row->cat)) ? $row->cat : '',
        'cats_separator'	=> '/',
    );
}

function conf_handle_options($row)
{
    return !empty($row->options) ? json_decode($row->options, 1) : array();
}

function conf_parse_images($row)
{
    if ( empty($row->images) )
        return array();
    $imgs = $row->images;
    return $imgs;
}

}
?>

0

a ta linia w której wyskakuje Ci błąd to?

0

to dokładnie ten wycinek

if ( !defined('ABO_LOGIN') )
user_error('Can not get/write image '.$url.' from '.$this->name.' error type: '.$type);

0

a co to jest 'ABO_LOGIN' i dlaczego sprawdzasz czy jest zdefiniowany?

0
Miang napisał(a):

a co to jest 'ABO_LOGIN' i dlaczego sprawdzasz czy jest zdefiniowany?

kod powinien wyglądać tak jak poniżej niestety nie wiem co autor miał na miał ABO_LOGIN? wygląda tak jak by wywoływał ten błąd jak brakuje lub jest zly format zdjecia ale tu jest wszystko ok

private function mark_images_as_wrong($url, $type) { if ( $this->name != 'ab' && defined('ABO_LOGIN') ) { global $db_abo; $db_abo->sql_query("INSERT INTO skyshop_common.abo_wh_images_404 (url, name, date, type, `md5`) VALUES('".m($url)."', '".$this->name."', '".CUR_DATE."', '".m($type)."', '".md5($url)."')"); } if ( !defined('ABO_LOGIN') ) user_error('Can not get/write image '.$url.' from '.$this->name.' error type: '.$type); }
0
Miang napisał(a):

a co to jest 'ABO_LOGIN' i dlaczego sprawdzasz czy jest zdefiniowany?

kod powinien wyglądać tak jak poniżej niestety nie wiem co autor miał na miał ABO_LOGIN? wygląda tak jak by wywoływał ten błąd jak brakuje lub jest zly format zdjecia ale tu jest wszystko ok

private function mark_images_as_wrong($url, $type) { if ( $this->name != 'ab' && defined('ABO_LOGIN') ) { global $db_abo; $db_abo->sql_query("INSERT INTO skyshop_common.abo_wh_images_404 (url, name, date, type, `md5`) VALUES('".m($url)."', '".$this->name."', '".CUR_DATE."', '".m($type)."', '".md5($url)."')"); } if ( !defined('ABO_LOGIN') ) user_error('Can not get/write image '.$url.' from '.$this->name.' error type: '.$type); }
0

A podaj funkcję która wywołuje mark_images_as_wrong.
Nie jest to chyba problem z zdjęciem.

0

Skoro $db_abo->sql_query to ABO_LOGIN prawdopodobnie jest flagą oznaczającą, że logowanie do bazy się udało.
Co jest w admin/admin inc/class_import.php linie: 2790 - 2820?

0
arczinosek napisał(a):

Skoro $db_abo->sql_query to ABO_LOGIN prawdopodobnie jest flagą oznaczającą, że logowanie do bazy się udało.
Co jest w admin/admin inc/class_import.php linie: 2790 - 2820?

wycinek od 2786 - 2823

public function wh_imagename($src) { if ( substr($src,0,8) === 'file:///' ) return basename($src);
	$wh_imagename = md5($src).'.jpg';

	if ( method_exists($this, 'conf_filename_images') )
		$wh_imagename = $this->conf_filename_images($src);

	return $wh_imagename;
}

private function mark_images_as_wrong($url, $type)
{
	if ( $this->name != 'ab' && defined('ABO_LOGIN') )
	{
		global $db_abo;
		$db_abo->sql_query("INSERT INTO skyshop_common.abo_wh_images_404 (url, name, date, type, `md5`) VALUES('".m($url)."', '".$this->name."', '".CUR_DATE."', '".m($type)."', '".md5($url)."')");
	}
	if ( !defined('ABO_LOGIN') )
		user_error('Can not get/write image '.$url.' from '.$this->name.' error type: '.$type);
}

private function check_marked_image_as_wrong($url)
{
	if ( $this->name == 'ab' || !defined('ABO_LOGIN') )
		return false;
	global $db_abo;
	if ( !defined('MARK_TABLE_FRESH') )
	{
		define('MARK_TABLE_FRESH', true);
		$db_abo->sql_query("DELETE FROM skyshop_common.abo_wh_images_404 WHERE name = '".m($this->name)."' AND date < NOW() - INTERVAL 5 DAY");
	}
	$res = $db_abo->sql_fetch($db_abo->sql_query("SELECT * FROM skyshop_common.abo_wh_images_404 WHERE name = '".m($this->name)."' AND `md5` = '".md5($url)."'"));
	if ( !empty($res['url']) )
		return true;
}
0

ktoś pomoże?

0

Jak już pisał @arczinosek, że jest flaga logowania do bazy danych.
Brak flagi oznacza brak połączenia z bazą danych.

0
PiDev napisał(a):

Brak flagi oznacza brak połączenia z bazą danych.

Skoro cała reszta działa OK to wygląda na to, że dostępy ustawione są prawidłowo.
Może się tak zdarzyć np. wtedy, kiedy kod, który aktualnie chcesz wykonać jest wcześniej niż kod inicjalizacji połączenia z bazą.
Jeśli kolejność jest prawidłowa to sprawdziłbym czy połączenie jest ustanawiane zawsze czy może ma jakieś warunki, które akurat teraz nie są spełnione.

Czy to jest jakiś CMS? Chciałbym zajrzeć do kodu

0

Sklep ?
Jak na razie bez kodu to wróżenie z fusów.

0

Tak jest to sklep php skyshop kod samego skryptu już wklejałem

0

Problem jest tylko ze zdjęciami których nie może pobrac i wrzucić do sklepu reszta jest ok

1 użytkowników online, w tym zalogowanych: 0, gości: 1