Попробуйте функцию Fileinfo finfo_buffer()
:
$filename = 'image.jpg';
$contents = file_get_contents($filename);
$finfo = finfo_open(FILEINFO_MIME_TYPE);
var_dump( finfo_buffer($finfo, $contents) ); // string(10) "image/jpeg"
Вы действительно говорите «не хватает фактического создания файла», так что, похоже, он соответствует вашим требованиям, даже если он использует Fileinfo.