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?
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?
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?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 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 tipoSpero di essere stato d'aiutoCodice 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' );
![]()
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:
cosa sbaglio?Codice PHP:$filename = "stiloso.css";
$handle = fopen($filename, "r");
$stile = fread($handle, filesize($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' );
"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!!
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:Poi invece di fare la fine come avevi fai così: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( $parsename, 0, $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;
}
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;
Grazie mille, sbirciando qui e la ho trovato questo:
e ora funziona benissimo. Grazie ancora.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);
"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!!