Почему Zend Framework Validate терпит неудачу для MimeType, когда вызывается isValid () - PullRequest
3 голосов
/ 25 мая 2011

Это поставило меня в тупик за последние несколько часов.

            // 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, PHP 5.3. Я бы хотел использовать метод isValid () для проверки загруженного файла, но тип mime не работает. Какие-либо предложения?

Ответы [ 2 ]

2 голосов
/ 25 мая 2011

Mimetypes загруженного файла никогда не бывают слишком надежными ...

Обычно я проверяю расширение файла как печальную попытку, и, если это вообще возможно, стараюсь на самом деле проверять содержимое файла.

Если это изображение, вы можете запустить getimagesize (), если это PDF, вы можете создать валидатор для вызова Zend_Pdf :: load ($ filename) и проверки на наличие ошибок.К сожалению, даже валидатор «Image» столкнулся с той же проблемой для меня.

1 голос
/ 25 мая 2011

возможно, расширение файла неверно, когда вы загружаете или проверяете файл, потому что application / octet-stream появляется, когда вы используете. * В качестве расширения.

Проверьте файл в вашем finfo классе.

//$oFileInfo -> file($_FILES['myfile']['tmp_name'] );
...