[PHP] Download di file con errore all'interno.

MarcoGrazia

Utente Attivo
15 Dic 2009
852
20
28
62
Udine
www.stilisticamente.com
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.

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.
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.
 

MarcoGrazia

Utente Attivo
15 Dic 2009
852
20
28
62
Udine
www.stilisticamente.com
Aggiornamento pomeridiano! (Sì lo so l'altro post scritto pochi minuti fa, ma si riferiva ad un intervento del mattino)
Sono perplesso, ora funziona.
Non ho fatto che una modifica, aggiungere un altro header(), quello che calcola la dimensione del file da scaricare: header('Content-Length: ' . filesize($file)); un po' strano, ma forse è perché tronca la dimensione al file effettivo, non so mi pare una ...str... tr :D ma no, non è così, tolta la modifica ha comunque funzionato, quindi non è quella.
Mistero della fede! Ma vorrei capire cosa è successo.
 
Discussioni simili
Autore Titolo Forum Risposte Data
R Download file multipli da directory php PHP 0
C [PHP] Problema con download file PHP 0
spider81man [PHP] Pulsante SUBMIT per download diretto dei file PHP 9
I [PHP] visualizza file pdf in una cartella e download PHP 7
F [PHP] Download file da campo LongBlob PHP 1
fabryx [PHP] RISOLTO: Download file da web e trasferimento su server PHP 2
G Forzare il download di un file con PHP PHP 0
D download file pdf da mysql con php PHP 1
M Download file remoto da codice php PHP 3
L Consiglio su download o no di file con php PHP 0
D [risolto] Questo file potrebbe danneggiare il tuo computer - Download con PHP PHP 2
C php: al download di un file scrivere il log su file esterno. PHP 1
T [PHP] [Javascript] Download e contatore PHP 3
I [PHP] download documento pdf per ogni operaio PHP 4
D force-download.php e statistiche... PHP 2
B [PHP] impedire download video PHP 12
I php download PHP 2
F Cerco Hosting con VECCHIE versioni di php Hosting 0
Cosina Captcha php PHP 1
S passare un valore da un form a un file .php con metodo post PHP 4
N php msyql PHP 6
N php problemi a visualizzare video PHP 3
A menu a tendina php PHP 1
D protezione cartelle: blocco visualizzazione/scaricamento contenuto, ma abilitazione utilizzo dati da parte di file .php presenti sul sito Web Server 1
F Php date_diff PHP 1
K [PHP] Aggiungere caratteri ad una stringa in base alla lunghezza della stessa PHP 2
C Wp-admin a file php WordPress 5
Lino80 [Retribuito] Cerco programmatore php per modifica/inserimento funzione/valori da un plugin importer wordpress Offerte e Richieste di Lavoro e/o Collaborazione 0
csi Inviare file jpg in locale alla stampante con php PHP 0
M Passaggio variabili array php su un tasto jq PHP 3
E Php aggiornamento tabella PHP 9
G phpmailer e php 8.1 con estensione mysqli PHP 6
M Invio dati database via email php PHP 0
K [php] Problema con inner join PHP 4
K [php]form invio dati PHP 0
P Codifica caratteri speciali mysql php PHP 0
K [PHP] Problema con variabili concatenate. PHP 1
E Stampante termica escpos-php PHP 6
JeiMax Modifica codice php personalizzato PHP 2
G Come modificare un pdf in php PHP 1
U Link a doppio file PHP PHP 0
E PHP & jQuery PHP 8
N Passare array da php a javascript PHP 5
F Applicazione PHP/MySQL per prenotazioni: limitare il numero massimo di posti prenotabili PHP 20
L tipo boolean non funzionante su mariadb (mysql). E codice php 7.4. PHP 0
U PHP creare un file excel dopo ricerca nel DB PHP 0
M PHP/MySQL - Estrarre valori min e max di ogni gruppo PHP 5
F Php e fatturazione elettronica PHP 0
P lanciare script asp (o php) da jquery Javascript 1
Couting95 inserire dati da un file di testo in una tabella in php PHP 1

Discussioni simili