Nefunkční validace uploadovaného souboru
- Barda
- Člen | 11
Zdravím.
Pokouším se validovat formulář. Hlavně bych potřeboval , aby šel
uploaudovat pouze soubor s příponou xml.
současný kód:
$form = new Form;
$form->addText('nazev', 'Název trasy:')
->setRequired('Prosím nazev trasy');
$form->addSelect('zeme', 'Země:', $countries);
$form['zeme']->setDefaultValue('0');
$form->addText('lokalita', 'Lokalita:')
->setRequired('Prosím lokalitu');
$form->addTextArea('popis', 'Popis trasy:')
->addRule(Form::MAX_LENGTH, 'Poznámka je příliš dlouhá', 1000)
->setRequired('Prosím popis');
$form->addUpload('gpx', 'XML Soubor:')
->addRule(Form::MIME_TYPE,'Povolené typy souborů jsou pouze xml','text/xml');
$form->addSubmit('submit', 'Vlozit');
$form->onSuccess[] = callback($this, 'includeDriveFormSubmitted');
return $form;
Pokud nahraju xml soubor, tak validací neprojde. Netušíte někdo kde by
mohla být chyba?
Předem díky
Editoval Barda (13. 2. 2012 10:40)
- Michal Vyšinský
- Člen | 608
Zkus jako mime type dát i „application/xml“. Nevím jestli to
pomůže.
A zkus prosím vkládat zdrojový kód mezi zančky /--php a \-- máš na to
nad textareou i tlačítko ;)
Editoval CherryBoss (10. 2. 2012 14:02)
- Barda
- Člen | 11
to 22:
zkusil jsem dát výpis proměnné souboru po odeslání reklamace a toto je
výstup:
Nette\Http\FileUpload Object ( [name:Nette\Http\FileUpload:private] ⇒ data.xml
[type:Nette\Http\FileUpload:private] ⇒ [size:Nette\Http\FileUpload:private]
⇒ 1573199 [tmpName:Nette\Http\FileUpload:private] ⇒
C:\xampp\htdocs\www/images/4f38db645d260.gpx
[error:Nette\Http\FileUpload:private] ⇒ 0 )
Tak to vypadá, že type nic nevrací :-(
A navíc jsem testoval jestli se vrací nějaký type u jiného typu souboru a
taky nic nevrátí. V tom asi bude zakopanej pes co?
Netušíš jak to zprovoznit?
Díky
Editoval Barda (13. 2. 2012 10:52)
- Barda
- Člen | 11
[Tue Feb 14 12:35:58 2012] [warn] pid file C:/xampp/apache/logs/httpd.pid
overwritten – Unclean shutdown of previous Apache run?
[Tue Feb 14 12:35:58 2012] [notice] Digest: generating secret for digest
authentication …
[Tue Feb 14 12:35:58 2012] [notice] Digest: done
Vypadá to, že současný php_fileinfo.dll vůbec není podporováno pro win7 a nikde nemůžu najít novou knihovnu pro win7 :-(
Editoval Barda (14. 2. 2012 14:55)
- Barda
- Člen | 11
Etch napsal(a):
Barda napsal(a):
Vypadá to, že současný php_fileinfo.dll vůbec není podporováno pro win7 a nikde nemůžu najít novou knihovnu pro win7 :-(
To nemá s W7 nic společného. Na jednom počítači mám W7 + Wamp a fileinfo funguje naprosto normálně.
A nějaký návrh čím by to mohlo jít. Ale při spouštění apache pres
xampp control vyskočí hláška: C:/xampp/php/ext/php_fileinfo.dll není
navržena na spuštění systému Windows nebo obsahuje chybu.......
Nemohl by si mi nahrát třeba na uložto tvůj fileinfo?
Editoval Barda (14. 2. 2012 15:38)
- Etch
- Člen | 403
moje php_fileinfo.dll
ale jednodušší by si měl, kdyby jsi si stáhl přímo wamp server a vyzkoušel si ty knihovny vykopírovat z něj.
Navíc je divný, že ti to nic nevrací ani bez fileinfo. Pokud totiž na
serveru není, tak by to furt mime typ mělo vracet za pomocí
mime_content_type()
. Nebo se něco změnilo??
- bene
- Člen | 82
Na mime se NEMUZES spolehnout, pokud ti jde o priponu!
Jinak to jde udelat uplne jednoduse…
/**
*
* @param IControl $control
* @param array $allowedExtensions lowercase! seznam povolenych pripon
* @return bool
*/
public function fileExtensionValidator(IControl $control, array $allowedExtensions)
{
$file = $control->getValue();
if ($file instanceof \Nette\Http\FileUpload) {
$ext = strtolower(pathinfo($file->getName(), PATHINFO_EXTENSION));
return in_array($ext, $allowedExtensions);
}
return false;
}
$fileControl->addRule(callback($this, 'fileExtensionValidator'), "Neplatná přípona souboru. Soubor musí mít příponu 'xml'", array('xml'));