+ Rispondi al messaggio
Visualizzazione dei risultati da 1 a 4 su 4

Da PHP a XML a pdf

  1. #1
    xmaxfane non è in linea Scolaretto
    Vi spiego il problema: ho necessita di fare delle stampe di dati intabellati risultanti da laboriose query.
    Siccome il metodo migliore per ottenere delle stampe decenti è tramite pdf, e siccome ho notato che quando le query sono abbastanza impegnative la pagina non riesce a crearmi il pdf perchè va in timeout (utilizzo la classe ezpdf), ho pensato di creare in alternativa i dati in formato xml e successivamente creare il pdf.
    Qualcuno conosce delle classi che mi possano aiutare ad ottenere il formato xml da un'array risultante da una query e successivamente che li trasformino in pdf?!?

    Thanks
    ℹ️ Leggi di più su xmaxfane ...

  2. #2
    L'avatar di Master85
    Master85 non è in linea Moderatore Globale Ultimo blog: Eclipse: Un IDE per PHP e Python
    Ciao xmaxfane,
    solo a leggere il titolo della discussione mi sono messo paura
    Dunque, il documento XML e' un semplice file di testo a cui si assegna una particolare formattazione in base alle necessita'. Vedesi RSS, ATOM, WSDL e altri ancora, sono documenti XML oggi utilizzati per diverse mansioni. Tornando al discorso delle query laboriose e lo script in timeout, posso pensare ad una cattiva scrittura di codice oppure ad un database con centinaia di tabelle con milioni di record. Comunque, tralasciando questi particolari, credo che passare da SQL a XML ed infine a PDF non migliori di molto, anzi, vai a peggiorare, i tempi di elaborazione aumenteranno notevolmente. Crei un file XML da oltre 2 o 3 MB e successivamente esegui il parsing del file per generare il PDF, non credo sia la soluzione corretta.

    Non hai fornito molte informazioni riguardo il database e alle query, dunque non ho altri suggerimenti. Personalmente, scarterei a priori la tua soluzione, anche perche' ad XML si ricorre per altri motivi.


  3. #3
    xmaxfane non è in linea Scolaretto
    Quote Originariamente inviato da Master85 Visualizza il messaggio
    Tornando al discorso delle query laboriose e lo script in timeout, posso pensare ad una cattiva scrittura di codice oppure ad un database con centinaia di tabelle con milioni di record.
    Non hai fornito molte informazioni riguardo il database e alle query, dunque non ho altri suggerimenti. Personalmente, scarterei a priori la tua soluzione, anche perche' ad XML si ricorre per altri motivi.

    Allora, innanzitutto grazie per l'attenzione.
    Io sto usando PostgreSQL 7.4.8 come db, ed ho 2 tabelle principali su cui lavorare di circa 14000 e 65000 record.

    $sql_reg = "SELECT distinct(anagrafica.id_anagrafica) FROM anagrafica, registro WHERE LOWER(rag_sociale) LIKE LOWER('$letter%') AND anagrafica.id_anagrafica = registro.id_anagrafica AND id_cooperativa = $id_coop";

    ...se poi ci sono altre opzioni aggiungo dei join con altre tabelle di dimensioni più contenute, sotto ai 1000 record, per ricavarmi alcuni dati.

    $result_reg = pg_query($sql_reg) or die("$sql_reg" . pg_last_error());

    while ( $data_reg = pg_fetch_array($result_reg) ) {

    $sql_reg2 = "SELECT registro.*, anagrafica.*, to_char(data_op, 'DD/MM/YYYY') as ita_data_op FROM registro WHERE registro.id_anagrafica = $data_reg[id_anagrafica] AND id_cooperativa = $id_coop AND registro.id_anagrafica = anagrafica.id_anagrafica";

    while ($data_reg2 = pg_fetch_array($result_reg2)){
    costruzione tabella pdf

    Queste sono il linea di massima le query, strutturate in questo modo perchè ad ogni risultato della seconda query creo una tabella.
    Alla fine di tutto creo il pdf con la classe ezpdf(http://www.ros.co.nz/pdf)
    Il problema è che non sempre riesce a crearlo perchè evidentemente ci sono troppi record da elaborare, alcune volte ci mette 2/3 minuti e lo crea.
    Hai dei suggerimenti da darmi in proposito?

    Thanks
    Ultima modifica di Master85; 08-01-2007 15:13 
    ℹ️ Leggi di più su xmaxfane ...

  4. #4
    L'avatar di Master85
    Master85 non è in linea Moderatore Globale Ultimo blog: Eclipse: Un IDE per PHP e Python
    Ciao xmaxfane,
    probabilmente il problema dello script time out e' legato al fatto che per ogni record estratto dal db il tuo script si ritrova ad eseguire una particolare query. Ho fatto riferimento all'esempio che hai proposto, vedo che non utilizzi le JOIN, ma cio' non dovrebbe rappresentare un problema. La classe per la generazione dei PDF credo sia una delle migliori attualmente disponibili ( personalmente uso http://www.fpdf.org/ ). Quando parlavo di cattiva gestione del codice, mi riferivo proprio all'esempio che hai postato.

    $sql_reg2 = "SELECT registro.*, anagrafica.*,
    
    E' proprio necessario recuperare tutti i campi da entrambe le tabelle ?

    $result_reg = pg_query($sql_reg) or die("$sql_reg" . pg_last_error());
    
    while ( $data_reg = pg_fetch_array($result_reg) ) {
    
    E' proprio necessario eseguire tante query per quanti sono i record restiuti dal primo risultato ? Non puoi ricorrere alle JOIN ?

    In caso di risposta negativa, agisci sulle variabili di configurazione del PHP, dal file php.ini, modificanto i limiti delle risorse del sistema:

    ;;;;;;;;;;;;;;;;;;;
    ; Resource Limits ;
    ;;;;;;;;;;;;;;;;;;;
    
    max_execution_time = 30     ; Maximum execution time of each script, in seconds
    max_input_time = 60	; Maximum amount of time each script may spend parsing request data
    memory_limit = 8M      ; Maximum amount of memory a script may consume (8MB)
    

+ Rispondi al messaggio