function truncate($fd, $trunc_size, $new_fname)
{
rewind($fd);
fseek($fd, $trunc_size, SEEK_SET);
$fn = fopen($new_fname, "wb");
while(!feof($fd))
{
fwrite($fn, fread($fd, 4096));
}
fclose($fn);
}
define (BLOCK_SIZE, 16);
// заголовок jpeg, строчка "яШяа JFIF"
$jpeg_header = pack("c*", 0xFF, 0xD8, 0xFF, 0xE0, 0x00, 0x10, 0x4A, 0x46, 0x49, 0x46);
// заголовок gif, строчка "GIF89a"
$gif_header = pack("c*", 0x47, 0x49, 0x46, 0x38, 0x39, 0x61);
// заголовок png, строчка "‰PNG"
$png_header = pack("c*", 0x89, 0x50, 0x4E, 0x47);
$fname = "d:\\uknown_file_0";
$fd = fopen ($fname, "rb");
$file_header = fread ($fd, BLOCK_SIZE);
if ($pos = strpos($file_header, $jpeg_header)) // это JPEG
{
truncate($fd, $pos, $fname.".jpg");
}
elseif ($pos = strpos($file_header, $gif_header)) // это GIF
{
truncate($fd, $pos, $fname.".gif");
}
elseif ($pos = strpos($file_header, $png_header)) // это PNG
{
truncate($fd, $pos, $fname.".png");
}
else // это что-то еще
{
rename($fname, $fname."???");
}
fclose ($fd);