Problem s file uploadem
- jirkamailto
- Člen | 27
Dobry den, prochazel jsem forum ohledne file uploadu a v kodu mam nasledujici:
<?php
$form->addFile('picture', "Fotografie:")
->addRule(FORM::MIME_TYPE, "Zadejte správný typ souboru", 'image/*');
?>
a potom obsluha formulare
<?php
if ($form->isSubmitted())
{
if ($form->isValid())
{
$values = $form->getValues();
$file = $values['picture'];
//$destination je uplna cesta k souboru
$file->move($destination);
}
}
?>
Vyse uvedeny kod mi nefunguje. Snazim se o nahrani souboru do urciteho adresare v adresari portalu. Pouzivam nette jen castecne a to zejmena na generovani formularu. V php mam safe mode vypnuty, /tmp directory je nastavena. Po spusteni tohoto kodu se nic nestane a ani se nevytvori soubor v /tmp. Prosim mohl by mi nekdo napsat, kde mam chybu, popr. funkcni kod? Predem dekuji za odpovedi.
Potreboval bych se jeste zeptat, zdali se do /tmp soubor nahrava jiz pri zavolani metody getValues() nebo az pri zavolani metody move?
- lucass
- Člen | 89
Metoda getValues() nad $form ti vrací jen hodnoty z formuláře. Vlastní kopírování dělá až move.
Pro debug bych:
- nejprve zjistil, jestli $file je instancí HttpUploadedFile,
- co obsahuje samotné $file,
- co ti vrátí move() – zřejmě false, jestli se nenakopíruje,
- jestli máš v $destination i název souboru, např. „/tmp/“ . $file->name, event. nějakej tvůj „/tmp/nazev.souboru“, nebo jestli vidí vůbec tu $destination(zkus třeba file_exists($destination)).
Podle mě bude chybka v $destination.
Editoval lucass (16. 11. 2009 20:57)
- Ondřej Mirtes
- Člen | 1536
Já bych zkontroloval $values['picture']->isOk()
a
$values['picture']->getError()
. V $destination
by
měla být absolutní cesta, kam chceš soubor uložit.
Co všechno můžeš na HttpUploadedFile zkontrolovat nalezneš
v API, případně si můžeš ten objekt dumpnout –
Debug::dump($values['picture'])
.
Editoval Ondřej Mirtes (16. 11. 2009 22:04)
- jirkamailto
- Člen | 27
Diky moc, uz to funguje. Problem byl v tom, ze jsem jako destination daval nazev adresare, do ktereho se ma soubor nakopirovat ale uz bez nazvu souboru, pod kterym se ma ulozit.
vypadalo to nasledovne:
spatne:
<?php
$destination = "/var/www/project/folder";
?>
dobre:
<?php
$destination = "/var/www/project/folder/file.png";
?>
- jirkamailto
- Člen | 27
Jeste jen doplneni, nefunguje to kdyz misto file.png je:
<?php
$name = $file->getName();
$destination = "/var/www/project/folder/$name";
?>
Nevim proc, ale nepodarilo se mi to rozchodit. Vyresil jsem ale jinak a to ze jsem nazev souboru dal natvrdo, protoze v mem pripade se jedna stejne o docasny file a hned po nahrani se presune pomoci bashovskeho skriptu.