Ho creato una classe che in locale funziona senza problemi ed in remoto no...
Come posso farne il debbug?
In particolare mi servirebbe seguire lo sviluppo di un array.
Quali sono le tecniche?
Ho creato una classe che in locale funziona senza problemi ed in remoto no...
Come posso farne il debbug?
In particolare mi servirebbe seguire lo sviluppo di un array.
Quali sono le tecniche?
Arjuna
finding solutions
stampa a video tutte le variabili a ogni cambiamento.
Io quando faccio debug uso questa funzione (soprattutto per gli array)
La richiamo e ottengo questo risultato:codice:function pre($var) { if(empty($var)) { echo "variabile vuota"; } echo "<pre>"; print_r($var); echo "</pre>"; }
codice:$prova = array("test"=>"test1","testA" =>"test2"); pre($prova); -- Array ( [test] => test1 [testA] => test2 )![]()
print_r lo uso spesso ma non basta.
L'array è vuoto.
Io voglio sapere perchè.
Ecco in sintesi il file che non funziona:
il file xml esiste ed è ben formato.codice:<?php class gallery { var $struct; var $fdata; var $data; function gallery ($fdata) { $this->struct = array(); $this->data = $this->parse_file($fdata); } function startElement($parser, $name, $attrs) { $tag = array("name"=>$name,"attrs"=>$attrs); array_push($this->struct, $tag); } function data($parser, $data) { if(trim($data)) { $this->struct[count($this->struct)-1]['data']=$data; } } function endElement($parser, $name) { $this->struct[count($this->struct)-2]['child'][] = $this->struct[count($this->struct)-1]; array_pop($this->struct); } function parse_file($file) { $xml_parser = xml_parser_create(); xml_set_element_handler($xml_parser, array($this,"startElement"), array($this,"endElement")); xml_set_character_data_handler($xml_parser, array($this,"data")); $parse = xml_parse($xml_parser, file_get_contents($file)); if(!$parse) { die("XML parsing error"); xml_parser_free($xml_parser); } return $this->struct; } } $album = 'foto'; $file = "xmlData/".$album.".xml"; $gallery = new gallery ($file); print_r ($gallery->data); ?>
Non capisco perchè l'array che in locale viene regolarmente popolato, in remoto non funziona.codice:<?xml version='1.0'?> <elenco> <foto nome='foto01' link='album/foto/' /> <foto nome='foto02' link='album/foto/' /> <foto nome='foto03' link='album/foto/' /> <foto nome='foto04' link='album/foto/' /> </elenco>
Arjuna
finding solutions
bhe innanzi tutto appurerei che alla funzione parse_data arrivi il file, poi controllerei se l'evento start element e end element vengano richiamati mettendo nelle relative funzioni un echo che dimostri il passaggio... avanza per gradi e cerca di capire se l'array da pieno viene svuotato o se non viene mai riempito...
ho usato tre echo.
uno per verificare il file
uno per printare lo start
uno per printare l'end
il locale funge tutto.
in remoto non mi visualizza la pagina.
senza visualizzazione non posso verificare un cavolo.
senza gli echo mi da solo l'array vuoto
Arjuna
finding solutions
ora mi stapa i risultati... chi lo capisce è bravo...
passo a verificare l'array
Arjuna
finding solutions
non capisco, se fai un echo non mostra nulla?
sei sicuro che non sia un errore banale (tipo non aver istanziato la classe)?
se li non va un motivo c'è, non ti fissare sul fatto che in locale va...
ciao
L'array si svuota all'inizio di endElement.
startElement lo lavora bene.
Ma come esce da quella funzione ed entra in endElement risulta vuoto.
Ho impostato una echo alla fine di startElement e una all'inizio di endElement.
Per questo posso dire così.
Pare che l'array non venga riformattato quando esce da una funzione.
cosa significa?
Arjuna
finding solutions
usa il dom se ti serve parsare un file
VM su SSD da 5$! https://www.digitalocean.com/?refcode=f6925c7f0ddb