FileUpload u Apache Windows – nelze nahrat do existujici slozky

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

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

Solution
Člen | 50
+
0
-

Postni sem továrnu, která vytváří form.

aannubis
Člen | 33
+
0
-

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

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

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

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

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

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#147

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