Info:

Ik ben voor een osCommerce winkel een aantal dingen aan het testen... je kent het wel
Ik heb me ff geregistreerd bij ICEcat.biz. Dit is een website waar je gemakkelijk hele product informatie pagina's kunt vinden voor het gebruik in bijvoorbeeld osCommerce. Nu heeft het bedrijf bInTime(.com) een leuk open source "ICEcat connector" gereleased. Hiermee kunnen gemakkelijk alle producten uit de database van ICEcat dmv. bijvoorbeeld (in dit geval) een xml pagina in osCommerce worden gezet.

Dit leek mij wel leuk en wou ik dus ff proberen

Probleem:

het script stopt na op het beeld "parsing" weer te geven. (aka. echo "<br />parsing\n"

Vraag:

Wie weet hoe dit komt? Het script download namelijk wel gewoon de refs.xml file naar de server toe alleen als die bij het "parsen" komt dan stopt die ermee... Hoe kan dit en hoe kan ik zorgen dat het hele script gewoon doorloopt??

Script:

<?php
if (version_compare(PHP_VERSION,'5','>='))
require_once('../includes/domxml-php4-to-php5.php');
require '../includes/configure.php';
require '../'.DIR_WS_FUNCTIONS.'database.php';
require '../includes/database_tables.php';

$icecat_product_list = 'data.icecat.biz/export/freexml.int/INT/files.index.csv';
$icecat_refs_xml = 'data.icecat.biz/export/freexml.int/refs.xml';
echo "\n";
tep_db_connect() or die('<br>Unable to connect to database server!');

$product_list = DIR_FS_DOWNLOAD.'product.list';
echo "<br />wgetting \n".'http://'.ICECAT_LOGIN.':'.ICECAT_PASSWORD.'@'.$icecat_product_list."\n";
copy('http://'.ICECAT_LOGIN.':'.ICECAT_PASSWORD.'@'.$icecat_product_list, $product_list)
or die( "\n<br />failed to copy product list exiting...\n");
echo "<br />products list downloaded\n";

echo "<br />loading data to database\n";
tep_db_query("DROP TABLE IF EXISTS temp_ice_product_list");
tep_db_query(" CREATE TABLE temp_ice_product_list(
path varchar(255),
product_id int(11),
updated date,
quality varchar(15),
supplier_id int(11),
products_model varchar(255),
catid int(11),
m_prod_id varchar(255),
KEY (supplier_id)
)");
tep_db_query("LOAD DATA LOCAL INFILE '".$product_list."' INTO TABLE temp_ice_product_list");
tep_db_query("ALTER TABLE temp_ice_product_list DROP COLUMN path");
tep_db_query("ALTER TABLE temp_ice_product_list DROP COLUMN updated");
tep_db_query("ALTER TABLE temp_ice_product_list DROP COLUMN quality");
tep_db_query("ALTER TABLE temp_ice_product_list DROP COLUMN catid");
tep_db_query("ALTER TABLE temp_ice_product_list DROP COLUMN product_id");
tep_db_query("ALTER TABLE temp_ice_product_list DROP COLUMN m_prod_id");
tep_db_query("ALTER TABLE temp_ice_product_list ADD COLUMN manufacturers_name varchar(255)");
echo "<br />loaded\n";
################################################
#
# processing refs.xml
#
echo "<br />Wgetting supplier list\n";
$refs_xml = DIR_FS_DOWNLOAD.'refs.xml';
echo '<br />http://'.ICECAT_LOGIN.':'.ICECAT_PASSWORD.'@'.$icecat_refs_xml."\n";
copy('http://'.ICECAT_LOGIN.':'.ICECAT_PASSWORD.'@'.$icecat_refs_xml, $refs_xml)
or die( "\n<br />failed to copy $refs_xml ...\n");
echo "<br />parsing\n";
if(!$dom = domxml_open_file($refs_xml)){
die("\n!!:: error parsing $refs_xml \n!!:: exiting\n");
echo "<br />dom-xml open file completed\n";
}
$root = $dom->document_element();
if(!$root){
die("\n!!:: error parsing(root) $refs_xml \n!!:: exiting\n");
}
echo "<br />Processing suppliers\n";
$supp_list = $root->get_elements_by_tagname('SuppliersList');
$supp_list = $supp_list[0];
$suppliers = $supp_list->get_elements_by_tagname('Supplier');

$supplirs_dump = DIR_FS_DOWNLOAD.'suppliers_dump.csv';
$file_handle = fopen($supplirs_dump,"a") or die(" error opening - $supplirs_dump \n");

foreach($suppliers as $supp){
if($supp->has_attribute('ID')) { $supp_id = $supp->get_attribute('ID'); }
if($supp->has_attribute('Name')) { $supp_name = $supp->get_attribute('Name'); }
fwrite($file_handle,"$supp_id\t$supp_name\n");
}
unset($suppliers);
fclose($file_handle) or die(" error closing $supplirs_dump");
echo "<br />inloading suppliers to database\n";
tep_db_query("DROP TABLE IF EXISTS temp_ice_supplier");
tep_db_query("CREATE TABLE temp_ice_supplier(
icecat_supplier_id int(11) primary key,
supplier_name varchar(255) not null default '',
KEY (icecat_supplier_id))");
tep_db_query("LOAD DATA LOCAL INFILE '$supplirs_dump' INTO TABLE temp_ice_supplier");
echo "<br />updating supplier info\n";
tep_db_query("UPDATE temp_ice_product_list tp , temp_ice_supplier ts
SET tp.manufacturers_name = ts.supplier_name
WHERE tp.supplier_id = ts.icecat_supplier_id");
tep_db_query("DROP TABLE IF EXISTS temp_ice_supplier");
tep_db_query("ALTER TABLE temp_ice_product_list DROP COLUMN supplier_id");
tep_db_query("DELETE FROM temp_ice_product_list WHERE manufacturers_name IS NULL");
tep_db_query("DROP TABLE IF EXISTS ".ICECAT_AVALIABLE_PRODUCTS);
tep_db_query("ALTER TABLE temp_ice_product_list RENAME TO ".ICECAT_AVALIABLE_PRODUCTS);




?>


Resultaat nu:


# (c) 2007 bInTime.com http://www.bintime.com # URLs import routine
wgetting http://testje:[email protected]/export/freexml.int/INT/files.index.csv
products list downloaded
loading data to database
loaded
Wgetting supplier list
http://testje:[email protected]/export/freexml.int/refs.xml
parsing

En daar stopt die dus :S

Link om zelf te kijken:

http://www.vipmaurice.com/winkel2/icecat/icecat_import.php
Het lijkt er op dat dit fout gaat:

<?php
        if(!$dom = domxml_open_file($refs_xml)){
         die("\n!!:: error parsing $refs_xml \n!!:: exiting\n");
?>

Wel vreemd dat die foutmelding in die niet weergegeven wordt.

Check:
• of $refs_xml bestaat
• of de rechten van $refs_xml goed staan, of die van de map waarin het bestand zich bevindt
• echo $dom eens naar het scherm om te kijken wat hij teruggeeft.
refs_xml bestaat...
rechten staan goed want het bestand staat namelijk zelfs in de map dus wordt wel door het script gedownload...

echo $dom geeft geen resultaat... :S

<?php
    error_reporting(E_ALL);
    ini_set('display_errors', true);
?>

heb je die al bovenaan staan? Misschien dat er dan nog wat meer info vrij komt.
al geprobeerd... weergeeft helemaal niks extra's

edit:

iemand anders op een ander forum had als tip dat het bestand refs.xml van 46mb te groot was om in een x binnen te halen dmv. een php script... toch staat refs.xml na het draaien van dit script gewoon op mn server met als size 46mb maargoed als ik het naar mn pc download via ftp dan wordt het bestand op mn pc ineens 3mb?

Kan het hier misschien aan liggen? :S

Quote van die persoon:

"Een bestand van tientallen MB's in 1 keer met DOM parsen en in het geheugen zetten, dat kost veel geheugen, een veelvoud van de grootte van het bestand. Waarschijnlijk wordt het php script gekilled omdat het teveel geheugen kost. Met Xpath kun je ook zoeken in het bestand zonder dat je het helemaal in hoeft te laden. Op www.w3schools.com staat wel eea aan info over xpath, en met google zijn ook genoeg voorbeeldscriptjes te vinden."

Reageren