当从远程服务器上传图像时,使用错误的文件类型保存图像


saving image with wrong fileType while upload it from remote server

我发现了一个有趣的事情,当我保存图片像这样(在输入我有*.txt文件只有一个URL的图像)

<?
function cu($url)
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_REFERER, 'http://treto.ru');
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2');
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    $res_curl = curl_exec($ch);
    curl_close($ch);
    return $res_curl;
}
$uploaddir = 'uploads/';
foreach($_FILES as $file)
{
    $orig = $uploaddir .trim(basename($file['name']));
    if(move_uploaded_file($file['tmp_name'], $orig))
    {
        $images_arr = file($orig);
        foreach($images_arr as $v)
        {
            $data = cu(trim($v));  // get pic through cURL (it's the only way in my case)
            $filename = basename($v);
            $arr67 = explode('.',$filename);
            $ext = $arr67[count($arr67)-1];
            $save = rand(1000,9999).'__'.time().'.jpg';
            if(!is_file($uploaddir.$save))
            {                                       
                $im = imagecreatefromstring($data);
                if ($im !== false)
                {                               
                    imagepng($im,$uploaddir.$save);
                    imagedestroy($im);
                    $sizes = getimagesize($uploaddir.$save);
                    echo '<img src="'.$uploaddir.$save.'" alt="rt" title="'.$sizes[0].'*'.$sizes[1].'.'.$ext.'" border="0"><br />';
                }
                else
                {
                    echo 'An error occurred.<br />';
                }      
            }
            else
            {
                $sizes = getimagesize($uploaddir.$filename);
                echo '<img src="'.$uploaddir.$filename.'" alt="hh" title="'.$sizes[0].'*'.$sizes[1].'" border="0"><br />';
            }               
        }
    }
    else
    {
        echo 'error';
    }            
}
?>

我收到正确编码和保存的图像,输出到浏览器…

但是当我用'.'代替'.jpg'时。美元ext…

(这里是完整的代码)

<?
function cu($url)
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_REFERER, 'http://treto.ru');
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2');
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    $res_curl = curl_exec($ch);
    curl_close($ch);
    return $res_curl;
}
$uploaddir = 'uploads/';
foreach($_FILES as $file)
{
    $orig = $uploaddir .trim(basename($file['name']));
    if(move_uploaded_file($file['tmp_name'], $orig))
    {
        $images_arr = file($orig);
        foreach($images_arr as $v)
        {
            $data = cu(trim($v));  // get pic through cURL (it's the only way in my case)
            $filename = basename($v);
            $arr67 = explode('.',$filename);
            $ext = $arr67[count($arr67)-1];
            $save = rand(1000,9999).'__'.time().'.'.$ext;
            if(!is_file($uploaddir.$save))
            {                                       
                $im = imagecreatefromstring($data);
                if ($im !== false)
                {                               
                    imagepng($im,$uploaddir.$save);
                    imagedestroy($im);
                    $sizes = getimagesize($uploaddir.$save);
                    echo '<img src="'.$uploaddir.$save.'" alt="rt" title="'.$sizes[0].'*'.$sizes[1].'.'.$ext.'" border="0"><br />';
                }
                else
                {
                    echo 'An error occurred.<br />';
                }      
            }
            else
            {
                $sizes = getimagesize($uploaddir.$filename);
                echo '<img src="'.$uploaddir.$filename.'" alt="hh" title="'.$sizes[0].'*'.$sizes[1].'" border="0"><br />';
            }               
        }
    }
    else
    {
        echo 'error';
    }            
}
?>

保存的文件有另一种类型- text/x-generic(但我需要image/x-generic),像这样(在中间)

我检查了-文件有相同的内容,

那么它是什么-服务器配置错误或php错误?

注:在这些文件上测试

wovo4ka.ru/图片/wovo4ka_logo.jpg

treto.ru/img_lb Settecento/,/per_sito/ambienti/01. jpg

检查扩展。例如,如果文件是wovo4ka.ru/pic/wovo4ka_logo.JPG而不是小写的jpg

,则会产生text/x-generic