Yii finfo_file()未找到

时间:2013-07-05 01:55:58

标签: php yii

我正在使用Yii上传一些文件。而且我收到以下错误。

finfo_file() [<a href='function.finfo-file'>function.finfo-file</a>]: File or path not found 'C:\xampp\tmp\phpF48A.tmp'

我不确定这是什么,我已经读过这个主题,我不确定我有magic.mime数据库,我需要得到它并配置它吗?或者由于其他原因导致的问题。这是我第一次使用Yii,所以我不确定这只是配置问题还是什么。这是堆栈:

 if($this->mimeTypes!==null)
221         {
222             if(function_exists('finfo_open'))
223             {
224                 $mimeType=false;
225                 if($info=finfo_open(defined('FILEINFO_MIME_TYPE') ?      FILEINFO_MIME_TYPE : FILEINFO_MIME))
226                     $mimeType=finfo_file($info,$file->getTempName());
227             }

任何帮助,非常感谢。要添加,文件将保存在正确的目录中,但它的记录不会保存在数据库中。

由于

强尼

更新了代码

模型

array('file', 'file', 'allowEmpty' => false, 'maxSize'=> 512000, 'maxFiles'=> 1, 
        'mimeTypes' => 'application/msword, application/vnd.openxmlformats-officedocument.wordprocessingml.document, application/rtf, text/plain',

控制器(几乎是默认的Gii代码)

    public function actionCreate() {

    $model = new File;


    if (isset($_POST['File'])) {
        $model->setAttributes($_POST['File']);

        // Set file
        $model->file = CUploadedFile::getInstance($model,'file');

        // Set directory
        $dest = Yii::getPathOfAlias('application.uploads');

        $model->tmp_name = time();

            $model->file->saveAs(($dest . '/' . $model->tmp_name . '.' . $model->file->extensionName));


        if ($model->save()) {


        } else {
                $this->redirect(array('view', 'id' => $model->id));
        }
    }

    $this->render('create', array( 'model' => $model));
}

2 个答案:

答案 0 :(得分:2)

我发现Yii的文件验证系统的mimeType检查部分有点问题(或者至少是气质的;-)。您可能遇到许多故障,但这与我之前看到的错误不同。

Per @ PeterM的评论,看起来确实无法找到您的临时文件,这意味着很难完成验证。如果您禁用mimeType验证,然后将文件重命名为上传文件(以便知道它应该在哪里),您的文件最终会上传吗?

最好确保您的上传系统非常可靠,然后再添加mimeType验证。因为他们可能有点挑剔......

答案 1 :(得分:1)

我不确定为什么或这有什么问题。我只能显示最终的代码似乎工作得很好(除了我还没有对.docx上传进行排序。但所有其他类型的上传都很好)。

<强>型号:

            array('file', 'file', 'on' => 'insert', 'maxSize'=> 512000, 'maxFiles'=> 1, 
        'mimeTypes' => 'application/msword, application/vnd.openxmlformats-officedocument.wordprocessingml.document, application/vnd.openxmlformats-officedocument.wordprocessingml.document, application/rtf, text/plain',
        'tooLarge'=> 'File cannot be larger than 500KB.',
        'wrongType'=> 'Format must be:<code>.doc</code>, <code>.docx</code>, <code>.txt</code>, <code>.rtf</code>'),

<强>控制器:

    public function actionCreate() {

    $model = new File;


    if (isset($_POST['File'])) {

        $model->setAttributes($_POST['File']);

        // Set file
        $model->file = CUploadedFile::getInstance($model,'file');

        // Set directory
        $dest = Yii::getPathOfAlias('application.uploads');

        $model->tmp_name = time();
        $model->file_type = $model->file->type;
        $model->file_size = $model->file->size;


        if ($model->save()) {

            $model->file->saveAs(($dest . '/' . $model->tmp_name . '.' . $model->file->extensionName));

            $this->redirect(array('view', 'id' => $model->id)); 

        }
    }

    $this->render('create', array( 'model' => $model));
}

希望对别人有所帮助。