FileUpload u Apache Windows – nelze nahrat do existujici slozky
- aannubis
- Člen | 33
Ma FileUpload nejaka omezeni pro Apache na Windowsech?
nasledujici kod totiz vyhodi Unable to upload file exception, slozka existuje presne tak jak vypise chyba cestu, a zkousel jsem normalni i zpetne lomitko:
$image = $form['lang_flag']->getValue();
if($image->isOk() && $image->isImage()) {
$language->lang_flag = $image->getName();
}
$language -> save();
$image->move(WWW_DIR . '/flags');
->
Unable to move uploaded file ‚C:\Program Files\EasyPHP\tmp\phpB360.tmp‘ to
‚D:\dev\admin-fw\www/flags‘.
- aannubis
- Člen | 33
Padik napsal(a):
Postni sem továrnu, která vytváří form.
public function __construct($parent, $name)
{
parent::__construct($parent, $name);
$this->addText('lang_name', 'Název jazyka:')
->addRule(Form::FILLED, 'Zadejte prosím název jazyka.');
$this->addText('lang_code', 'Kód jazyka:')
->addRule(Form::FILLED, 'Zadejte prosím kód jazyka.');
$this->addCheckbox('lang_show_flag');
$this->addCheckbox('lang_show_name');
$this->addFile('lang_flag');
$this->addImage('odeslat', '/css/admin/tlac-ulozit.png');
$this->onInvalidSubmit[] = array($this, 'formNotSubmited');
}
onSubmit nastavuji v presenteru v zavislosti na tom zda jde o formular pro vytvoreni ci editaci, toto je samostana trida formulare LanguageForm extends AppForm.
Vytvoreni i editace funguji, co se tedy tyce ulozeni zaznamu do databaze. Selze pouze upload, ackoli standardne na localhost pomoci cisteho PHP mi uploadovat jde, a cesta, kterou to hlasi v chybe skutecne existuje.
Editoval aannubis (30. 3. 2011 16:54)
- aannubis
- Člen | 33
Tak nakonec jsem to rozchodil takto, nejak jsem prehledel ze u move nemam jmeno souboru.
Ale nastal jiny problem – nahravam soubor jpg, a kdyz pouziju $image->isImage() tak to neprojde.
if($image->isOk() && $image->isImage()) {
$niceFileName = \Nette\String::webalize($image->getName(), '.');
$language->lang_flag = $niceFileName;
\Nette\Debug::barDump($niceFileName);
$image->move(WWW_DIR . '/flags/' . $niceFileName);
$language->save();
}
- aannubis
- Člen | 33
Tak bohuzel mi stale nejde nahrat soubor. Zkousel jsem i vymazat slozku kam se ma ulozit, nebot funkce move si ji vytvori – vytvorila si ji, ale soubor do ni neulozila! Pouzivam Apache pod windows.
Nize prikladam celou tridu formulare vcetne metody, ktera zajistuje upload souboru.
<?php
namespace AdminModule\Forms;
use Nette\Application\AppForm,
Nette\Forms\Form,
Model\Language,
Nette\Web\HttpUploadedFile;
class LanguageForm extends AppForm
{
public function __construct($parent, $name)
{
parent::__construct($parent, $name);
$this->addText('lang_name', 'Název jazyka:')
->addRule(Form::FILLED, 'Zadejte prosím název jazyka.');
$this->addText('lang_code', 'Kód jazyka:')
->addRule(Form::FILLED, 'Zadejte prosím kód jazyka.');
$this->addCheckbox('lang_show_flag');
$this->addCheckbox('lang_show_name');
$this->addFile('lang_flag');
$this->addImage('odeslat', '/css/admin/tlac-ulozit.png');
$this->onInvalidSubmit[] = array($this, 'formNotSubmited');
}
protected function saveFlag(HttpUploadedFile $image, Language $language) {
$success = null;
if($image->isOk()) {
$niceFileName = \Nette\String::webalize($image->getName(), '.');
$success = $image->move(WWW_DIR . '/flags/' . $niceFileName);
if($success) {
$language->lang_flag = $niceFileName;
$language->save();
}
}
return $success;
}
public function formNotSubmited(LanguageForm $form) {
foreach($form->getErrors() as $error) {
$form->getPresenter()->flashMessage($error, 'error');
}
$form->cleanErrors();
}
public function formSubmitedCreate(LanguageForm $form)
{
try {
$values = $form->getValues();
$language = new Language;
$language->lang_name = $values['lang_name'];
$language->lang_code = $values['lang_code'];
$language->lang_show_flag = $values['lang_show_flag'];
$language->lang_show_name = $values['lang_show_name'];
$this->getPresenter()->model->createLanguage($language);
$image = $form['lang_flag']->getValue();
$this->saveFlag($image, $language);
$this->getPresenter()->flashMessage('Nová jazyková mutace vytvořena!', 'success');
$this->getPresenter()->redirect('Languages:default');
}
catch (\DibiDriverException $e) {
switch ($e->getCode()) {
case 1062: $msg = "Duplikátní kód jazykové mutace!"; break;
default: $msg = "V databázi došlo k chybě!";
}
$this->getPresenter()->flashMessage($msg, 'error');
}
}
public function formSubmitedSave(LanguageForm $form)
{
try {
$values = $form->getValues();
$language = new Language;
$language -> lang_id = $values['lang_id'];
$language -> lang_name = $values['lang_name'];
$language -> lang_code = $values['lang_code'];
$language -> lang_show_flag = $values['lang_show_flag'];
$language -> lang_show_name = $values['lang_show_name'];
$language -> save();
$image = $form['lang_flag']->getValue();
if($this->saveFlag($image, $language)) {
@unlink(WWW_DIR . '/flags/' . $values['old_flag']);
}
$this->getPresenter()->flashMessage('Jazyková mutace uložena!', 'success');
$this->getPresenter()->redirect('Languages:default');
}
catch (\DibiDriverException $e) {
switch ($e->getCode()) {
case 1062: $msg = "Duplikátní kód jazykové mutace!"; break;
default: $msg = "V databázi došlo k chybě!";
}
$this->getPresenter()->flashMessage($msg, 'error');
}
}
}
- Solution
- Člen | 50
Äsi jsem to měl udělat rovnou, ale pročti si ten kod a přijdeš na
to:
https://api.nette.org/…ile.php.html#147
- aannubis
- Člen | 33
Padik napsal(a):
Äsi jsem to měl udělat rovnou, ale pročti si ten kod a přijdeš na to:
https://api.nette.org/…ile.php.html#147
Procetl jsem, nechapu kde by mohla byt chyba. Nebo myslis muj kod?
- aannubis
- Člen | 33
aannubis napsal(a):
Padik napsal(a):
Äsi jsem to měl udělat rovnou, ale pročti si ten kod a přijdeš na to:
https://api.nette.org/…ile.php.html#147Procetl jsem, nechapu kde by mohla byt chyba. Nebo myslis muj kod?
Vypisoval jsem si i dumpy promennych primo z funkce move v nette a vse vypada v naprostem poradku, jen soubor se uploadne, pak ale jakoby z temp adresare zmizel a nejde presunout.