Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [PHP] Salvare output del database su file html

    Ciao a tutti, ho una chat che carica le righe dal database e le visualizza a video, vorrei però che l'utente, tramite la pressione di un tasto (e quindi con uno script php) possa salvare in un file html le righe della chat che vede. come posso fare?

  2. #2
    Utente di HTML.it L'avatar di Nosfe
    Registrato dal
    Jan 2004
    Messaggi
    454
    Tempo fa ho fatto qualcosa di simile. Alla pressione del tasto prendi le righe che vuoi dal DB, crei un file temporaneo, ci scrivi dentro le righe e lo invii.

  3. #3
    Originariamente inviato da Nosfe
    Tempo fa ho fatto qualcosa di simile. Alla pressione del tasto prendi le righe che vuoi dal DB, crei un file temporaneo, ci scrivi dentro le righe e lo invii.
    Non è che per caso ricordi il post o l'articolo o hai qualche cosa da potermi dare come spunto?

  4. #4
    Utente di HTML.it L'avatar di Nosfe
    Registrato dal
    Jan 2004
    Messaggi
    454
    Non c'era ne post ne thread, l'ho in casa :P

    Come spunto posso darti i passi che facevo (se ricordo bene).

    1. Prendiamo record e li formattiamoi in html come vogliamo e lo salviamo nella variabile $testo;
    2. Ora devi chiederti come vuoi fare. Vuoi creare una pagina per ogni utente oppure è sempre lo stesso nome? Hai la possibilità di eseguire cronjob per cancellare i file che hai creato in automatico o lo devi implementare nel codice?
    - Diciamo che lo implementiamo, quindi nel nome del file ci metti anche il time() e fai il controllo che quelli più vecchi di 60*60*5(5 minuti) li cancella.
    3. Ora puoi per esempio decidere che il file si chiami salva_chat_xxxxxxxxxx.htm (dove x sta per il time(), es. salva_chat_158658658.htm) e controllare che nella cartella (per esempio) /tmpsave non sia già presente. Questo lo puoi fare leggendo i file nella cartella facendo l'explode del . (punto) e del _ (underscore)

    4. Se non è presente (magari aveva cliccato due volte ma con il time() è difficile che esista... meglio esseere scrupolosi) possiamo aprire il file con $file=fopen($filename,"w+"); (cioé se non esiste lo crea).
    5. Ora scriviamo e chiudiamo fwrite($file,$testo);
    fclose($file);
    6. Rimane solo da inviare la pagina con qualcosa tipo
    Codice PHP:
    $content file_get_contents$file );  
    header'Content-Type: application/octet-stream' );  
    header'Content-Disposition: attachment; filename='.$filename );
    header'Content-Length:'.strlen$content ) );
    header'Content-Transfer-Encoding: binary' ); 
    Spero di essere stato d'aiuto

  5. #5
    sei stato eccezionale e la procedura funziona, ma purtroppo solo il parte:
    quando arriva il momento di far salvare il file, il caricamento diviene piuttosto lungo e il file risultante (diverso da quello sul server) è vuoto. Posto il codice:
    Codice PHP:
    $filename "stiloso.css";
    $handle fopen($filename"r");
    $stile fread($handlefilesize($filename));
    fclose($handle);
    //$r è la variabile con tutte le righe della chat
    $r "<html><style>$stile</style><body bgcolor=\"#E9DEA1\">" $r "</body></html>";

    $filename "tmpchat/chatsave_".$_SESSION['nome']."_".time().".htm";
    if(!
    file_exists($filename))
    {
      
    $handle fopen($filename"w");
      
    fwrite($handle$r);
      
    fclose($handle);
    }
    $content file_get_contents$filename );
    header'Content-Type: application/octet-stream' );
    header'Content-Disposition: attachment; filename='.$filename );
    header'Content-Length:'.strlen$content ) );
    header'Content-Transfer-Encoding: binary' ); 
    cosa sbaglio?
    "Una volta che si saranno esaurite senza successo tutte le possibilita', ci sara' una soluzione, semplice e ovvia, che saltera' immediatamente all'occhio di chiunque altro."

    Guardate: Il Miracolo delle Noci!!

  6. #6
    Utente di HTML.it L'avatar di Nosfe
    Registrato dal
    Jan 2004
    Messaggi
    454
    Probabilmente c'è un problema con l'invio del file creato. Suppongo che se fai l'echo di $r ti dia il tutto giusto?

    Cercando tra le mie cose ho trovato questo script che dovrebbe aiutarti, non ricordo dove l'ho preso ma c'è il nome nel codice:
    Codice PHP:
    function forceDownload( &$file ) {
    /**
     * Function forceDownload:
     *download any type of file if it exists and is readable
     * -------------------------------------
     * @authorAndrea Giammarchi
     * @date18/01/2005
     * @compatibilityPHP >= 4.3.0
     */
    if( file_exists$file ) == true && is_readable$file ) == true ) {
    $filename = &basename$file );
    if( 
    strpos$_SERVER['HTTP_USER_AGENT'], 'MSIE' ) !== false ) {
    $parsename = &explode'.'$filename );
    $last count$parsename ) - 1;
    $filename = &implode'%2E'array_slice$parsename0$last ) );
    $filename .= '.'.$parsename[$last];
    }
    if (!
    function_exists('file_get_contents')) {
       function 
    file_get_contents($file) {
           
    $file file($file);
           return !
    $file false implode(''$file);
       }
    }
    $content = &file_get_contents$file );
    header'Content-Type: application/octet-stream' );
    header'Content-Disposition: attachment; filename='.$filename );
    header'Content-Length:'.strlen$content ) );
    header'Content-Transfer-Encoding: binary' );

    }
    return 
    $content;

    Poi invece di fare la fine come avevi fai così:
    Codice PHP:
    $filename "tmpchat/chatsave_".$_SESSION['nome']."_".time().".htm"
    if(!
    file_exists($filename)) 

      
    $handle fopen($filename"w"); 
      
    fwrite($handle$r); 
      
    fclose($handle); 
    }

    $content=forceDownload$filename );
    /*se non vuoi fare il controllo per cancellare e lo vuoi fare manualmente tipo 1 volta al mese puoi risparmiare spazio su disco scrivendo uno spazio vuoto nel file che avevi creato*/
    $fil=fopen($filename,'w');
    fwrite($fil," ");
    fclose($fil);
    /////////////////parte non necessaria comunque ^^
    $content=forceDownload$myFile );
    echo 
    $content

  7. #7
    Grazie mille, sbirciando qui e la ho trovato questo:
    Codice PHP:
    $content file_get_contents($filename);
    header("Content-Type: application/octet-stream");
    header("Content-Disposition: attachment; filename=$filename");
    header("Content-Description: Salvataggio Chat");
    header('Content-Length:'.strlen$content ));
    readfile($filename); 
    e ora funziona benissimo. Grazie ancora.
    "Una volta che si saranno esaurite senza successo tutte le possibilita', ci sara' una soluzione, semplice e ovvia, che saltera' immediatamente all'occhio di chiunque altro."

    Guardate: Il Miracolo delle Noci!!

  8. #8
    Utente di HTML.it L'avatar di Nosfe
    Registrato dal
    Jan 2004
    Messaggi
    454

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.