Avatar billede proviben Novice
01. januar 2005 - 12:45 Der er 5 kommentarer og
1 løsning

Fjerne brugte variabler

Hvordan fjernes alle ”værdier” af tidligere brugte variabler?

Fatal error: Cannot redeclare starttag()
Avatar billede erikjacobsen Ekspert
01. januar 2005 - 12:53 #1
Hvorfor vil du fjerne dem?

Den fejlbesked kan komme hvis du includerer samme fil mere end en gang.
Kig evt. på http://php.net/include_once
Avatar billede proviben Novice
01. januar 2005 - 13:51 #2
Med udgangspunkt i et script, som ganske fint parser en enkelt xml-fil, forsøger jeg nu, at parse 2 xml-filer, mit mål er 25 filer, i rap.

Variablerne ønskes fjernet, fordi det ikke spiller efter "sammensplejsningen".     

<?php

$GLOBALS['data'] = array();
$GLOBALS['current'] =& $GLOBALS['data'];

function startTag($parser, $name, $attribs) {
    $GLOBALS['current'][$name]['parent'] =& $GLOBALS['current'];
    $GLOBALS['current'] =& $GLOBALS['current'][$name];
}

function endTag($handler, $name) {
    $temp =& $GLOBALS['current'];
    $GLOBALS['current'] =& $temp['parent'];
    unset($temp['parent']);
}

function data($handler, $data) {
    $data = trim($data);
    if(!empty($data)) {
        $GLOBALS['current'][] = $data;
    }
}

$parser = xml_parser_create('') or die('Failed to create parser');
xml_set_element_handler($parser, 'startTag', 'endTag') or die ("Failed to set element handler");
xml_set_character_data_handler($parser, 'data') or die ("Failed to set data handler");

$fp = fopen('http://www.dummydummy.dk/dit.xml', 'r');
while ($xml = fread($fp, 4096))
  xml_parse($parser, $xml, feof($fp))
      or die(sprintf("XML error: %s at line %d",
          xml_error_string(xml_get_error_code($xml_parser)),
          xml_get_current_line_number($xml_parser)));

fclose($fp);

xml_parser_free($parser);

$data = $GLOBALS['data']['DIT']['D1'];

foreach($data as $name => $value) {
    foreach($value as $index => $text) {
        $tempArr[$index][$name] = $text;
    }
}

$db = mysql_connect('xxx', 'yyy', 'zzz');
mysql_select_db('xxx', $db);

$dbfields = "D0, D1, " . implode(', ', array_keys($tempArr[0]));
foreach($tempArr as $value) {

    $dbdata = implode("', '", $value);
    $sql = "INSERT INTO table ($dbfields) VALUES('DIT', 'D1', '$dbdata')";
    mysql_query($sql, $db);
}

mysql_close($db);

?>

<?php

$GLOBALS['data'] = array();
$GLOBALS['current'] =& $GLOBALS['data'];

function startTag($parser, $name, $attribs) {
    $GLOBALS['current'][$name]['parent'] =& $GLOBALS['current'];
    $GLOBALS['current'] =& $GLOBALS['current'][$name];
}

function endTag($handler, $name) {
    $temp =& $GLOBALS['current'];
    $GLOBALS['current'] =& $temp['parent'];
    unset($temp['parent']);
}

function data($handler, $data) {
    $data = trim($data);
    if(!empty($data)) {
        $GLOBALS['current'][] = $data;
    }
}

$parser = xml_parser_create('') or die('Failed to create parser');
xml_set_element_handler($parser, 'startTag', 'endTag') or die ("Failed to set element handler");
xml_set_character_data_handler($parser, 'data') or die ("Failed to set data handler");

$fp = fopen('http://www.dummydummy.dk/dat.xml', 'r');
while ($xml = fread($fp, 4096))
  xml_parse($parser, $xml, feof($fp))
      or die(sprintf("XML error: %s at line %d",
          xml_error_string(xml_get_error_code($xml_parser)),
          xml_get_current_line_number($xml_parser)));

fclose($fp);

xml_parser_free($parser);

$data = $GLOBALS['data']['DAT']['D1'];

foreach($data as $name => $value) {
    foreach($value as $index => $text) {
        $tempArr[$index][$name] = $text;
    }
}

$db = mysql_connect('xxx', 'yyy', 'zzz');
mysql_select_db('xxx', $db);

$dbfields = "D0, D1, " . implode(', ', array_keys($tempArr[0]));
foreach($tempArr as $value) {

    $dbdata = implode("', '", $value);
    $sql = "INSERT INTO table ($dbfields) VALUES('DAT', 'D1', '$dbdata')";
    mysql_query($sql, $db);
}

mysql_close($db);

?>
Avatar billede erikjacobsen Ekspert
01. januar 2005 - 14:10 #3
Der ser ikke du til at være grund til at erklære StartTag osv. mere end een gang - de er jo ens, så vidt jeg lige kan se.
Avatar billede proviben Novice
01. januar 2005 - 14:52 #4
Takker, det var lige det!
Avatar billede erikjacobsen Ekspert
01. januar 2005 - 14:55 #5
Fint. Jeg samler slet ikke på point. Svar selv, accepter eget svar.
Avatar billede proviben Novice
01. januar 2005 - 15:09 #6
Ok.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester