Ciao ragazzi ho un problema con un file in formato RTF.
In realtà il formato in se non è un problema, fino al salvataggio sul server prima del download è perfetto; il problema interviene dopo quando inizia il download.
In pratica al file RTF viene allegata l'intera pagina in formato HTML generata dal PHP.
E' l'HTML risultante della pagina da cui il file viene generato attraverso un form, in cui l'utente inserisce dei dati da inserire nel file RTF, prima di scaricarlo.
Funziona così, ci si collega ad una pagina e attraverso un form si inseriscono alcuni dati, come nome, attività e data di iscrizione e altri dati così.
Quindi si preme invia e i dati vengono registrati in un database e quindi viene stampata una pagina di resoconto, e l'utente può scegliere sia il formato PDF che l'RTF, a sua scelta.
E niente, quando scarico l'RTF nel file, come scrivevo sopra, trovo l'RTF correttamente compilato e poi sotto l'HTML.
Non capisco come questo accada e quindi non so come intervenire.
Il codice è relativamente e doverosamente semplice, prima apro un file in RTF che funge da template, dove all'interno nei punti in cui inserire i dati forniti dall'utente, ci sono dei tag così formattati ###NOME### che poi con una semplice strtr() modifico.
Se scarico il file così creato all'interno del server dal punto
risulta perfetto, quindi fino a lì, tutto funziona alla perfezione.
Qualcosa interviene al momento di utilizzare glie header(), ma non so cosa ne come.
Forse qualche cosa con ob_start() all'inizio della pagina, che mi tiene il flusso in memoria.
Non so che altro pensare.
In realtà il formato in se non è un problema, fino al salvataggio sul server prima del download è perfetto; il problema interviene dopo quando inizia il download.
In pratica al file RTF viene allegata l'intera pagina in formato HTML generata dal PHP.
E' l'HTML risultante della pagina da cui il file viene generato attraverso un form, in cui l'utente inserisce dei dati da inserire nel file RTF, prima di scaricarlo.
Funziona così, ci si collega ad una pagina e attraverso un form si inseriscono alcuni dati, come nome, attività e data di iscrizione e altri dati così.
Quindi si preme invia e i dati vengono registrati in un database e quindi viene stampata una pagina di resoconto, e l'utente può scegliere sia il formato PDF che l'RTF, a sua scelta.
E niente, quando scarico l'RTF nel file, come scrivevo sopra, trovo l'RTF correttamente compilato e poi sotto l'HTML.
Non capisco come questo accada e quindi non so come intervenire.
Il codice è relativamente e doverosamente semplice, prima apro un file in RTF che funge da template, dove all'interno nei punti in cui inserire i dati forniti dall'utente, ci sono dei tag così formattati ###NOME### che poi con una semplice strtr() modifico.
PHP:
// Apro il file template
$rtf = file_get_contents('bin/originale-' . $input['registro'][0] . '.rtf');
// Creo le sostituzioni
$sostituzioni = array(
'###NOME###' => $input['nome'],
'###COGNOME###' => $input['cognome'],
'###CITTA###' => $input['citta']
);
$str = strtr($str, $sostituzioni); // Qui scambio i ###TAG### con i valori corrispondenti.
// Salvo il file ottenuto
$file = 'documento-' . $input['registro'][0] . '.rtf';
file_put_contents($file, $str, LOCK_EX); // Ottengo il LOCK del file.
// Ora effettuo il download verso il client
header('Cache-Control: public');
header('Content-Description: File Transfer');
header('Content-Type: application/rtf');
header('Content-Disposition: attachment; filename= ' . $file);
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($file));
readfile($file);
Se scarico il file così creato all'interno del server dal punto
PHP:
file_put_contents($file, $str, LOCK_EX); // Ottengo il LOCK del file.
Qualcosa interviene al momento di utilizzare glie header(), ma non so cosa ne come.
Forse qualche cosa con ob_start() all'inizio della pagina, che mi tiene il flusso in memoria.
Non so che altro pensare.