php yii错误的mime类型与CFileHelper :: getMimeType

时间:2012-09-27 00:29:42

标签: php yii xampp mime-types

想检查我上传的图像是否适合mime类型:

 $user->image = CUploadedFile::getInstance($user, 'image');

在我的验证中,我用以下方法检查mime类型:

print_r(CFileHelper::getMimeType($this->image));

好吧,我上传了一个pdf和mime类型是application / pdf。 我将pdf重命名为test.jpg,而mime类型现在是image / jpg,这是一个问题。我只是想接受图像。

我使用的是最新版本: 警予,1.1.12.b600af; XAMPP Windows 1.8.0; PHP版本5.4.4

2 个答案:

答案 0 :(得分:2)

因为Yii默认根据扩展名定义mime类型。

You can see the code

public static function getMimeType($file,$magicFile=null,$checkExtension=true){//code}

如您所见$checkExtension=true

您可以这样尝试:

print_r(CFileHelper::getMimeType($this->image, null, false));

所以它不会通过扩展来决定。

出于验证目的:

class Item extends CActiveRecord
{
    public $image;

    public function rules()
    {
        return array(
            array('image', 'file', 'mimeTypes'=>'image/gif, image/jpeg'),
        );
    }
}

总是使用现有的东西,不要试图重新创建。

答案 1 :(得分:0)

PHP提供了finfo_open(),它实际上试图从文件内容中提取mimetype。像这样使用:

$finfo = finfo_open(FILEINFO_MIME_TYPE); // return mime type ala mimetype extension
$mediaFile->filemime = finfo_file($finfo, $fileName); 
    /* close connection */
finfo_close($finfo);

在此处阅读更多内容:http://php.net/manual/en/function.finfo-open.php

在我有限的经验中,finfo_open()效果很好。