2016-03-23 11 views
0

をアップロードしていない私は、ファイルのアップロード後にDBにデータを保存しようとすると、私は、次のエラーを取得しています:Yii2 - finfo_file(は/ tmp/phpqE6gyD):ストリームをオープンに失敗しました:ファイル保存後にそのようなファイルやディレクトリいいえ

finfo_file(/tmp/phpqE6gyD): failed to open stream: No such file or directory 

これはコード

$ userFolderPath = \ Yii :: getAlias( '@ webroot')です。 DIRECTORY_SEPARATOR 'ファイル'。 DIRECTORY_SEPARATOR \ Yii :: $ app-> user-> getIdentity() - > iduser;

 $model = new CsFile(); 
     $files = UploadedFile::getInstances($model, 'files'); 
     $errors = []; 

     if (!file_exists($userFolderPath)) 
      mkdir($userFolderPath, 0777, true); 

     foreach($files as $file): 
      $fileModel = new CsFile(); 
      $fileModel->files = $file; 

      if($fileModel->validate()): 

       $filename = str_replace(' ', '_', $file->baseName); 

       if(file_exists($userFolderPath . DIRECTORY_SEPARATOR . $filename . "." . $file->extension)): 
        $filename .= "-" .uniqid(); 
       endif; 

       $fileModel->files 
        ->saveAs($userFolderPath .DIRECTORY_SEPARATOR. $filename . '.' . $fileModel->files->extension); 

       $fileModel->iduser = Yii::$app->user->getIdentity()->iduser; 
       $fileModel->name  = $filename; 
       $fileModel->extension = $file->extension; 
       $fileModel->add_date = date('Y-m-d H:i:s'); 
       $fileModel->save(); 

      else: 

      endif; 

     endforeach; 

     var_dump('<pre>', $errors, '</pre>'); 

答えて

2

私は数週間前に同じ問題がありました。アップロード前にファイルの名前を変更してモデルを保存しようとすると、このエラーが表示されます。

あなたのアップロードを処理してテーブルにフィールドがない場合は、保存する前にこのフィールドの設定を解除するだけです:$files Model->files = null

あなたのシナリオが私と異なるのかどうか教えてください。

0

Yii2はあなた$model->upload関数の中で、この使用を修正するには、アップロードファイル

を保存する機能$model->upload()てUploadFileクラスを使用します。

return copy($this->YourAttribute->tempName, $newFileName);

代わり

return $model->attribute->saveAs($newFileName)

0

Clyffは正しいです。しかし、後で読むためにファイルのパスをデータベースに保存している場合は、属性をnullに設定しても機能しません。

問題は、$ model-> file-> saveAs();ですでに使用されているファイルフィールドにUploadedFile :: getInstance($ model、 'file')という結果を残してモデルを保存しようとするときです。 $ model-> save()は、保存され既に削除された一時ファイルパスのパスを直接保存することはできません。 $ model-> file-> saveAs($ path)が成功した後、次のようなことをする必要があります。

$ model-> file = $ path;

私はかなり不明瞭で、fileinfoの後に少し時間を費やしていました。

関連する問題