#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