scusa la domanda stupida, ma l'array files non contiene niente?
HTTP_RAW_POST_DATA è, letteralmente, TUTTO quello che il webserver riceve via post e dato che l'upload lo fanno i componenti standard di flash te la invieranno in modo standard pure ^^
comunque, a prescindere, invece di usare file_put_contents, prendi i dati e li inserisci in un campo blob o mediumblob, dipende quanto spazio massimo può occupare un'immagine
nota: i file molti li inseriscono nel database sotto forma esadecimale o encodati in base64 ... decisamente è una pratica sconveniente
usando la funzione bin2hex e poi nella query passare i dati con lo 0x davanti, per intenderci
mysql_query("INSERT INTO tabella (titolo, descrizione, contenuto) VALUES ('titolo', 'descrizione', 0x" . bin2hex($contenuto_del_file) . ")");
ci sono delle contro indicazioni nel mettere i file su database, ma anche dei vantaggi ovviamente.
L'unica vera e propria limitazione è la dimensione massima di una query eseguibile che di default è impostata ad 1MB e non so se si può cambiare tramite una query con l'istruzione SET! In pratica se devi uploadare più di 1 mb di dati, decisamente, non conviene utilizzare il database come backend ed in ogni caso salvare i file su database aumenta le risorse necessarie per la visualizzazione dei dati per non parlare poi del fatto che mentre il webserver manca anche gli header corretti per la cache, questo dovresti implementarlo tu ... insomma rischi di appesantire non poco il server su cui risiede il sito, soprattutto se questo è parecchio visitato