0

想检查我上传的图片是否有正确的 mime 类型:

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

在我的验证中,我检查了 mime 类型:

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

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

我使用最新版本:yii-1.1.12.b600af;XAMPP Windows 1.8.0;PHP 版本 5.4.4

4

2 回答 2

2

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

你可以看到代码

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'),
        );
    }
}

始终使用现有的东西,不要尝试重新创建。

于 2012-09-27T00:41:20.607 回答
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() 效果很好。

于 2012-09-27T10:13:47.440 回答