Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZendFramework] Zend_Validate_File_MimeType i ... nie działa.
Forum PHP.pl > Forum > PHP > Frameworki
Master Pain
Witam

W formularzu dodaję walidator: Zend_Validate_File_MimeType
Kod:
  1. $mimeType = new Zend_Validate_File_MimeType(array('application/msword', 'application/pdf', 'application/rtf'));
  2. $mimeType->setMessage('Tylko pliki: *.doc, *.pdf, *.rtf.');


Mimo tego formularz nie akceptuje plików *.doc, *.pdf, *.rtf.

Wiecie może co jest problemem? Używam ZF 1.9.5 (za chwilkę 1.9.6, wyszła wczoraj nowa wersja smile.gif )

Pozdrawiam!
batman
Wydaje mi się, że jest problem z tym, że przeglądarka źle wysyła nagłówki. Sprawdź na kilku różnych przeglądarkach typ wysyłanych plików. Zgaduje, że mime będzie application/octet-stream.
Master Pain
Witam

application/octet-stream ? Dla jakiego typu plików?
Zauważyłem też, że .rtf to application/msword
a .doc to application/vnd.ms-word.

Poza tym nadal nie działa. Testowane na FF, Operze, Chromie.
batman
Cytat
application/octet-stream ? Dla jakiego typu plików?
Dla większości plików binarnych, których przeglądarka nie potrafi rozpoznać.
Cytat
Zauważyłem też, że .rtf to application/msword
a .doc to application/vnd.ms-word.

Poza tym nadal nie działa. Testowane na FF, Operze, Chromie.
Sprawdź na IE. Ta przeglądarka obsługuje takie typy plików. W pozostałych mogą pojawiać się opisane przez Ciebie problemy.
Master Pain
To inaczej zapytam: jak ustawić walidator, żeby przepuszczał tylko pliki .doc, .pdf, .rtf? Musi działać w FF, Opera, Chrome, Safari ... no i IE6+.

Pozdrawiam.
batman
Doraźnie możesz użyć Extension Validator. Jednak to może powodować problemy z bezpieczeństwem, ponieważ łatwo podmienić rozszerzenie pliku i obejść ten walidator.
Master Pain
No to wiem winksmiley.jpg ale nie tego szukam. Dzięki od razu za pomoc, batman. Jak nie znajdzie się inne rozwiązanie to z tego skorzystam, ale wolałbym nie.
Master Pain
Przepraszam, za double-post, ale dodaję celowo, żeby było 'nowe' dla wszystkich.

Zapytałem wujka Google, i znalazłem takie info:

Cytat
For security reasons we had to turn off the default fallback mechanism of the MimeType, ExcludeMimeType, IsCompressed and IsImage validators. This means, that if the fileInfo or magicMime extensions can not be found, the validation will always fail.

If you are in need of validation by using the HTTP fields which are provided by the user then you can turn on this feature by using the enableHeaderCheck() method.

Oraz dalej
Cytat
You should note that relying on the HTTP fields, which are provided by your user, is a security risk. They can easily be changed and could allow your user to provide a malcious file.


Czyli, pozostaje mi użycie enableHeaderCheck(), które jest chyba trochę lepszym (choć nie idealnym, jak w/w) rozwiązaniem niż sprawdzanie rozszerzenia pliku. Lub włączenie rozszerzeń: fileInfo albo magicMime.

Pozdrawiam!
darko
może tak:
  1. // (...)
  2. $upload = new Zend_Form_Element_File("addme");
  3. $upload->setLabel("File ");
  4. $upload->setRequired(true);
  5. $upload->addValidator('Extension', false, 'doc,pdf,rtf');
  6. // (...)
  7. $form = new Zend_Form();
  8. // (...)
  9. $form->addElements(array($upload));
  10. // (...)
seth-kk
@darko: batman o tym pisze pare postow wyzej
@Master Pain: a to widziales:
Cytat
This component will use the fileinfo extension if it is available. If it's not, it will degrade to the mime_content_type function. And if the function call fails it will use the MIME type which is given by HTTP.

sprawdz z czego korzysta twoj serwer/php
Master Pain
Doszedłem do tego, ale dzięki!
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.