Newsgroup: it.comp.www.php
Titolo: php e xml

Ciao a tutti,
premetto che sono un neofita totale di php, ma che per necessita' ho preso
in mano un sito fatto in questo linguaggio e che, trovandolo molto
interessante, sto cercando di studiarne il codice per poterlo riutilizzare
anche in altri progetti.
Detto questo, passo a porvi il quesito.
Il sito deve visualizzare una serie di articoli per un (futuro) ecommerce.
Gli articoli sono veramente pochi, non arrivando a 10 e ho scartato
l'opzione sql perche' sarebbe un altro ostacolo da dover superare. Ho quindi
creato a mano un xml nel quale ho inserito tutto cio' che mi serve.
In breve, la pagina prodotti.php apre l'xml, ne fa il parsing e ne memorizza
il contenuto in un vettore, come descritto in diversi tutorial
sull'Internet. Il programma visualizza un articolo per volta: la prima volta
viene visualizzato l'articolo numero uno, con descrizione, prezzi, e foto,
quindi viene mostrata la lista con gli altri articoli. Cliccando su ogni
elemento della lista viene richiamata la stessa pagina prodotti.php con l'id
del prodotto e quindi visualizzati i dati relativi al prodotto selezionato.
La mia domanda deriva da questo fatto: ogni volta che richiamo il file
prodotti.php faccio la lettura del file xml contenente i dati dei prodotti,
e non reputo la cosa molto efficiente, tuttaltro! E' possibile rendere il
vettore che contiene il file xml persistente ? Ho fatto qualche tentativo ma
non ne vengo fuori. Ho ovviamente escluso la possibilita di metterlo nella
querystring. L'ideale sarebbe avere un flag che venga settato a true la
prima volta che viene richiesta la pagina, quindi leggere l'xml e
memorizzarlo nel vettore; quindi quando il codice richiama la stessa pagina
con un id diverso, non leggere piu' l'xml, ma semplicemente usare il vettore
precedentemente creato.
Immagino che la soluzione sia banale, se non banalissima, ma come ho detto
sono alle prime armi.
Ciao,
Marco
-- 
____________________________________________
Questo messaggio è rivolto unicamente al destinatario indicato e potrebbe 
contenere informazioni riservate o confidenziali. Se lo ha ricevuto per 
errore, ci scusiamo per l'inconveniente. Lo segnali cortesemente al mittente 
e distrugga subito l'originale. Ogni altro utilizzo sarà considerato 
illegale. Marco Boeri non si assume alcuna responsabilità per usi impropri 
di questo messaggio o di sue parti.
This message is for the designated recipient only and may contain privileged 
or confidential information. If you have received it in error, we apoligize 
for this. Please notify the sender immediately and delete the original. Any 
other use of the message is illegal. Marco Boeri does not accept any 
liability for corruption, interception or damages, if any, caused by 
unauthorized use of this message or parts. 

 vettore che contiene il file xml persistente ?
Sě, attraverso le variabili di sessione, ma non mi sembra per niente una
bella soluzione.

 Gli articoli sono veramente pochi, non arrivando a 10 e ho scartato
mm... se sono 10 prodotti solo... perché usare l'xml e non un bel array 
dichiarato in php con tutte le caratteristiche dei prodotti?

 E' possibile rendere il vettore che contiene il file xml persistente ?
Come dice RedWiz, puoi metterli in sessione, ma si tratta di un risparmio 
parziale. Va comunque scritta su un file codificata, e poi decodificata 
quando la estrai.
E` piu` veloce del parse di un XML, ma non di molto.
Viste le dimensioni di cui stiamo parlando, io lascerei com'e`.
Ma inizierei a studiarmi i database, che sono tendenzialmente molto piu` 
veloci a gestire queste cose, soprattutto quando le dimensioni dei dati 
aumentano.
Quando avrai tanti dati (o tantissimi accessi) di cui dovrai rappresentare 
sempre parti piccole (le ultime 10 news su un milione memorizzate, per 
dirne una), dai un'occhiata a memcache.
Bye.

Ciao a tutti,
anzitutto grazie per le prontissime risposte! (ieri era pasquetta e avevate 
gia' scritto !!!).
Vi debbo alcune precisazioni: ho scelto di non creare un array semplicemente 
perche' voglio dividere i dati dalla programmazione. In secondo luogo sto 
prendendo la cosa come esercizio per future implementazioni.
Non uso i db, principalmente perche' non ho tempo attualmente di dedicarmi a 
una cosa del genere, in secondo luogo perche' i dati sono veramente pochi e 
mi sembra un uso improprio, ed infine perche' mysql non e' nel pacchetto 
base del provider su cui e' appoggiato il sito e, sebbene costi poco, non 
reputo una buona idea far fare un acquisto di un prodotto che poi non viene 
utilizzato.
Ho provato ad usare le sessioni ma non riesco a far funzionare la cosa. 
Provero' ancora stasera ma gli esempi che ho trovato a mezzo google non mi 
soddisfano ne' mi danno soluzioni, perche' faccio esattamente cio' che viene 
scritto, ma il risultato e' differente.
Vi faccio l'esempio:
apro la sessione, la pagina relativa agli articoli testa se la variabile di 
sessione esiste, e nel caso non esista, apre il file xml, fa il parsing e lo 
memorizza sia nella variabile $xml che nella variabile di sessione. Mi 
aspetto che la seconda volta che apro la pagina la variabile di sessione, in 
quanto esistente, contenga al suo interno cio' che conteneva sia la 
variabile $xml che la stessa variabile di sessione la prima volta che la 
pagina e' stata aperta. Bene, non e' cosi': se la prima volta visualizzando 
con print_r() sia la variabile $xml che la variabile di sessione il 
risultato era lo stesso per entrambe e cioe' xml object, la seconda volta il 
risultato e' stato __php_undefined object (o qualcosa di simile). Al suo 
interno comparivano i dati corretti ma quando dovevano essere processati 
dalle righe preposte alla formattazione dei dati nella pagina, mi dava 
errore. Penso che sia dovuto al fatto che la gerarchia cambiasse da 
xml_object[array1->array2...] a 
__php_undefined...[php_undefined->array1->array2....] cioe' la gerarchia 
all'interno dell'array non era piu' la stessa ma si erano aggiunti 1 o piu' 
nodi (array di array). Il perche' di tutto cio' per me rimane un mistero, 
cosi' ho cancellato tutte le prove e riportato la situazione allo stato 
precedente: attualmente, ogni volta che viene aperta la pagina, php apre il 
file xml e lo legge. Ho fatto un test aggiornando il sito ed anche via web i 
risultati in termini di velocita' sono accettabili.
Scusate il post molto lungo.
Grazie a tutti,
Marco 

 object (o qualcosa di simile).
sicuramente fai qualche errore nella gestione della sessione (tipo
dimentichi qualche session_start o roba così), posta un po' di codice, se
ancora non dovesse riuscirti
Anche se rimango ancora dell'idea che l'uso della sessione non sia
indicato per questo tipo di dati.

ciao,
penso di aver trovato qualcosa:
guardando l'Internet ho trovato alcuni esempi di sessioni e un esempio 
indicava come memorizzare variabili, array ed oggetti all'interno dell'array 
di sessione. Bene per quanto riguarda gli oggetti veniva messo in evidenza 
che occorre includere la definizione di classe in ogni pagina che memorizza 
l'oggetto.
Important Note: You MUST include the class definition on *every page* when 
you store an object
Nella pagina in questione ho include_once("xml_class") percio' la classe 
viene inclusa una volta, e la prima volta l'oggetto viene memorizzato 
correttamente infatti tutto funziona, ma dalla seconda volta in poi 
l'oggetto e' "indefinito" e non xml object come dovrebbe essere.
Premetto che l'ho letto adesso e non ho ancora provato nulla (e penso che 
stasera me ne andro' a nanna o a leggere qualcosa a mio figlio) ma credo che 
sia la strada giusta.
Per quanto riguarda la tua considerazione, penso che alla fine tu abbia 
ragione, ma avevo due motivi per lavorare con gli xml: come gia' detto si 
tratta di una soluzione facilmente ampliabile e portabile su altri siti 
similari, e secondariamente, non ho mai lavorato con gli array di php, ne' 
con array associativi e non sapevo come crearne uno cosi' articolato da zero 
(adesso, avendo visto l'output di print_r() potrei riprodurlo).
ciao,
Marco