Jak na upload nejen obrázku
- ForestCZE
- Člen | 209
Ahoj, řeším problém s uploadem. Mám komponentu:
protected function createComponentName()
{
$form = new Form;
$form->addMultiUpload('upload', 'Soubory:')
....
->setAttribute('accept', '.bsp');
return $form;
}
To znamená, že na výběr budu mít jen soubory .bsp a jiné mi to vůbec v okně neukáže. Problém je v tom, že se dá accept přepsat, pokud dám „Prozkoumat“.
Jak tedy správně nastavit addRule, aby se jednalo o ty správné a nepodvrhnuté soubory?
->addRule(Form::... (nevím, jak dál)
Předem děkuji za nejspíš banální věc, se kterou si vážně nevím rady.
- ForestCZE
- Člen | 209
David Matějka napsal(a):
ahoj, budes asi potrebovat mime validator
To mě napadlo, že to asi bude MIME_TYPE, takže něco jako:
->addRule(Form::MIME_TYPE, 'Soubor musí být ve formátu .bsp!', '?/bsp')
Akorát právě nevím, co bude namísto otazníku. U obrázku je to image, u pdf application, ale tady nevím.
EDIT: Tak je to složitější, než jsem si myslel :D
Nakonec jsem si musel udělat script:
$finfo = finfo_open(FILEINFO_MIME_TYPE);
echo finfo_file($finfo, 'test.bsp');
finfo_close($finfo);
A výsledek je: application/octet-stream
Na to bych v životě nepřišel.
Editoval ForestCZE (5. 8. 2017 19:38)
- ForestCZE
- Člen | 209
Ještě bych se teda rád zeptal, jestli existuje v AddRule nějaká konstanta na zjištění přípony. Koukal jsem do dokumentace a nikde to nevidím. Díky.
Editoval ForestCZE (6. 8. 2017 3:33)
- h4kuna
- Backer | 740
Ne to neexistuje. Příponu velmi lehce změní i BUF. Proto se doporučuje kontrolovat mime type. Mimochodem co děláš se soubory pak na servru? Mám k tomu tuto knihovničku.
- ForestCZE
- Člen | 209
h4kuna napsal(a):
Ne to neexistuje. Příponu velmi lehce změní i BUF. Proto se doporučuje kontrolovat mime type. Mimochodem co děláš se soubory pak na servru? Mám k tomu tuto knihovničku.
Tak to je dost blbé. Budu mít například upload pro pdf soubory, kde MIME TYPE bude application/pdf, ale jakémukoliv pdf souboru můžu změnit příponu a projde to :D
Nic, je to administrace pro vlastní účely nikomu přístupná.
- ForestCZE
- Člen | 209
h4kuna napsal(a):
Nic ti nebrání si tuto vlastnost dopsat. Pokud máš takový mime type musí splňovat zároveň tuto koncovku.
No to právě, že ne. Mám:
->addRule(Form::MIME_TYPE, 'Only BSP you can upload!', 'application/octet-stream')
Jdou nahrát všechny BSP soubory , ale zkusil jsem prasárnu, že jsem vzal BSP soubor a přepsal mu příponu na .jpg a upload prošel, protože mime se nezměnilo.
Editoval ForestCZE (7. 8. 2017 22:39)
- Mysteria
- Člen | 797
Ale to je očekávané chování, protože MIME_TYPE určuje o jaký soubor se reálně jedná, bez ohledu na jeho koncovku, kterou můžeš podvrhnout. Pokud ti z nějakého důvodu vadí, že je „špatná“ koncovka, tak si můžeš všechny nahrané soubory přejmenovat tak, aby měli koncovku .bsp.
- ForestCZE
- Člen | 209
Mysteria napsal(a):
Ale to je očekávané chování, protože MIME_TYPE určuje o jaký soubor se reálně jedná, bez ohledu na jeho koncovku, kterou můžeš podvrhnout. Pokud ti z nějakého důvodu vadí, že je „špatná“ koncovka, tak si můžeš všechny nahrané soubory přejmenovat tak, aby měli koncovku .bsp.
Dost dobrá myšlenka. Bych mohl udělat nějaký foreach, který by projel všechny BSP soubory a zjistil, jestli maj .bsp a když ne, tak by ji to nastavilo.