vadná validace formuláře podle mimetype?
- jik
- Člen | 149
Ahoj,
mám php 8.2.10, nette/forms 3.2.2 a formulář:
protected function createComponentTabulkaForm() {
$form = new Form;
$form->addUpload('soubor', 'ze souboru')
->addRule($form::MimeType, 'Soubor musí být ve formátu CSV.', 'text/csv')
->addRule($form::MaxFileSize, 'Max velikost 10kB.', 10000);
$form->addProtection('Vypršel časový limit, odešlete formulář znovu');
$form->addSubmit('run', 'Načti soubor');
$form->onError[] = function ($form){
dump($form->getErrors());die;
};
$form->onSuccess[] = [$this, 'tabulkaFormSubmitted'];
return $form;
}
public function tabulkaFormSubmitted($form, $values) {
dump('prošlo');die;
}
ten zobrazuji takto:
{form tabulkaForm}
<table>
<tr>
<td>popis</td>
<td>Natažení tabulky</td>
</tr><tr>
<td>{label soubor /}</td>
<td>{input soubor}</td>
</tr><tr>
<td></td>
<td >{input run}</td>
</tr>
</table>
{/form}
Je to tedy ruční vykreslení, mimoto používám netteForms.js a v
.htaccess mám php_value upload_max_filesize 20M.
A teď zkouším do toho nahrávat různé soubory a různé velikosti a
nastávají mi případy:
- pokus o nahrání souboru xcf (gimp) skončí hláškou „Soubor musí být ve formátu CSV.“ – v okénku a nutno odkliknout OK (v pořádku)
- pokus o nahrání souboru csv ~20kB skončí hláškou „Max velikost 10kB.“ – v okénku a nutno odkliknout OK (v pořádku)
- pokus o nahrání souboru csv ~20B (2 řádky s nějakými políčky rozdělenými ;) vběhne do onError a dump vypíše „array 0 ⇒ ‚Soubor musí být ve formátu CSV.‘“. A tady nechápu, proč toto nastalo. Jakým způsobem se vlastně vyhodnocuje to mimetype?
Děkuji za radu
Editoval jik (26. 7. 12:57)
- nightfish
- Člen | 516
jik napsal(a):
Jakým způsobem se vlastně vyhodnocuje to mimetype?
https://github.com/…alidator.php#…
+ FileUpload::getContentType()
vrací hodnotu $_FILES
pod klíčem type
, kterou v rámci HTTP požadavku s uploadem
souboru posílá prohlížeč.
- jik
- Člen | 149
nightfish napsal(a):
https://github.com/…alidator.php#… +
FileUpload::getContentType()
vrací hodnotu$_FILES
pod klíčemtype
, kterou v rámci HTTP požadavku s uploadem souboru posílá prohlížeč.
Aha, takže tak trochu podraz ze strany fileinfo: ačkoliv máme mimetype text/csv, tak pro csv soubor tato funkce vrací text/plain. Děkuji.