3

これはここ数時間私を困惑させました。

            // Using just straight up FINFO detects the mime type
            $oFileInfo = new finfo( FILEINFO_MIME_TYPE );
            $sMimeType = $oFileInfo -> file($_FILES['myfile']['tmp_name'] );
            // $sMimeType == 'application/pdf';

            // Using Zend File Transfer... detects the mime type
            $upload         = new Zend_File_Transfer_Adapter_Http();                
            $upload->addValidator('MimeType', true, array('application/pdf'));
            // $upload->getMimetype('myfile') == 'application/pdf'

            // But when I try to validate it throws an exception
            $upload->isValid('myfile');
            // Throws 
            // [fileMimeTypeFalse] => File 'myawesomefile.pdf' has a false mimetype of 'application/octet-stream'

コードはApache、PHP 5.2(Zend Server)で正常に機能していましたが、現在はNginx、PHP-FPM、PHP5.3で動作しています。isValid()メソッドを使用してアップロードしたファイルを検証したいのですが、mimeタイプが機能していません。助言がありますか?

4

2 に答える 2

2

アップロードされたファイルのmimetypesは決して信頼できません...

私は通常、悲しい試みとしてファイル拡張子をチェックしますが、可能であれば、実際にファイルの内容をチェックしてみてください。

画像の場合はgetimagesize()を実行でき、PDFの場合はバリデーターを作成してZend_Pdf :: load($ filename)を呼び出し、エラーをチェックできます。悲しいことに、「画像」バリデーターでさえ私にとって同じ問題を抱えていました。

于 2011-05-25T05:05:51.670 に答える
1

拡張子として。*を使用するとapplication/octet-streamが表示されるため、ファイルをアップロードまたは検証するときにファイル拡張子が正しくない可能性があります。

finfoクラスのファイル関数を確認してください。

//$oFileInfo -> file($_FILES['myfile']['tmp_name'] );
于 2011-05-24T22:14:07.963 に答える