Bene ... la risposta al motivo per cui farà ciò che hai descritto è a causa del tuo uso della funzione header(). In PHP, non è possibile stampare nulla prima di una chiamata di intestazione poiché ciò indirizza il server Web a preparare un'intestazione di contenuto. Di solito quelli sostituiscono completamente tutti i contenuti.
In secondo luogo, vorrei ricordare che la memorizzazione di immagini in un database è solitamente una cattiva idea per due motivi.
- Ha un impatto significativo sulle prestazioni e sul rendering.
- Devi scrivere il codice per rendere i dati del BLOB invece di visualizzare semplicemente l'immagine stessa.
Il metodo preferito per la presentazione delle immagini basata su database sarebbe che le immagini fossero archiviate in una directory e i loro nomi di file archiviati nel database. Ora, quando desideri visualizzare le immagini, devi semplicemente eseguire il polling del DB per quali nomi di file desideri visualizzare e quindi includere semplicemente il nome del file in un attributo HTML.
Anche l'esecuzione è molto più veloce.
Inoltre, vorrei sottolineare che se desideri che uno script esegua effettivamente il tuo rendering, vorresti che lo script definisse l'intestazione e quindi echi o stampi il blob dell'immagine dopo aver definito l'intestazione.
Tieni presente che quando crei il tuo tag html... che nell'attributo src, lo faresti qualcosa di più simile a questo;
<img src="image.php?id=<some_number>">
Ora, il tuo file image.php sputerà i dati dell'immagine nel tag.