Jak na upload nejen obrázku

ForestCZE
Člen | 209
+
0
-

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.

David Matějka
Moderator | 6445
+
+2
-

ahoj, budes asi potrebovat mime validator

ForestCZE
Člen | 209
+
+1
-

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
+
0
-

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
+
0
-

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
+
0
-

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á.

h4kuna
Backer | 740
+
0
-

Nic ti nebrání si tuto vlastnost dopsat. Pokud máš takový mime type musí splňovat zároveň tuto koncovku.

ForestCZE
Člen | 209
+
0
-

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
+
+2
-

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
+
0
-

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.