Nefunkční validace uploadovaného souboru

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Barda
Člen | 11
+
0
-

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

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)

22
Člen | 1478
+
0
-

Formátuj kod pomoci /--php na začátku a uzavírací značkou \--. Zjisti si v submit metodě, jaký MIME te file má.. je možný, že nemáš na serveru extension, která ti MIME rozpozná.

Barda
Člen | 11
+
0
-

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)

22
Člen | 1478
+
0
-

no musíš si na instalaci PHP zprovoznit extension php_fileinfo.dll

P.S.: formátuj kod, viz. Texy syntax..

Editoval 22 (13. 2. 2012 11:25)

Barda
Člen | 11
+
0
-

Pockej. Moc ti nerozumim. To mam kvuli tomu preinstalovat PHPko? Protože opravdu nevim jak upravit dll soubor.

OK3
Člen | 91
+
0
-

Patrně bude potřeba odkomentovat příslušné rozšíření v php.ini: extension=php_fileinfo.dll a restartovat webserver

Editoval OK3 (14. 2. 2012 11:43)

Barda
Člen | 11
+
0
-

Vyzkouším. Děkuju

Tak jsem to odkomentoval a shodilo mi to appache. Nemohl by tam byt nejaky problem s kompatibilitou xamppu?

Editoval Barda (14. 2. 2012 11:58)

OK3
Člen | 91
+
0
-

Prohlídni si log apache, třeba tam najdeš, kde je problém.

Barda
Člen | 11
+
0
-

[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)

Etch
Člen | 403
+
0
-

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

Barda
Člen | 11
+
0
-

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

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

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'));
Barda
Člen | 11
+
0
-

benne: Díky moc. Teď vše funguje jak má :-)