Почему Zend Framework не выполняет проверку для MimeType при вызове isValid()

#php #zend-framework #zend-validate

#php #zend-framework #zend-validate

Вопрос:

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

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

Комментарии:

1. это зависит от сервера, серверы Linux обычно работают, если вы используете XAMPP или WAMP, у них обычно в конфигурации чего-то не хватает

Ответ №1:

Загруженные файлы mimetypes никогда не бывают слишком надежными…

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

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

Комментарии:

1. Спасибо. Я надеялся, что мне не придется отказываться от использования средства проверки для загрузки файлов, но если я не смогу получить из него надежный mime-тип, возможно, я откажусь от него.

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

Ответ №2:

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

Проверьте функцию file в вашем классе finfo.

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

Комментарии:

1. Файл, который я использую для тестирования, представляет собой обычный старый PDF с расширением и всем прочим. Кроме того, я пытаюсь выяснить, что и FINFO, и Zend Framework могут видеть mime-тип, но когда я использую функцию isValid для проверки, она считает, что файл является приложением / octet-stream