Souboru zmizí po uploadu url

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

Ahoj, mám formulář ve kterém uploaduju několik obrázků. Na localhostu mě se vše funguje perfektně, ale jakmile nahraju aplikaci na web tak pokud mám uploadu nějakej validaci např. tak mi ji to neustále vyhazuje (soubor není obrázek, není vyplněno…) přitom ty samé obrázky na localhostu fungují bezvadně. Probíhá to tak že se soubor odešle ale pak jakoby neměl jméno, pokud jsi ji zkusím jeho jméno nic to nevypíše, ve složce kam se to má nahrát nic není… V logu se taky nic neukáže… Mám verzi Nette 2 stable.

mkoubik
Člen | 728
+
0
-

A máš správně nastavená práva v adresáři, kam to uploaduješ?

Nodon
Člen | 8
+
0
-

Adresář má prava 775,ale myslím že v tom problem nebude protože to vypadá jako by mi ani formulář nepredal žádny soubor protože mi to neprijde ani pres getimagesize abych zjistil jesli je to obrazek, ale uplne to samé funguje na localhostu bez problémů

iguana007
Člen | 970
+
0
-

Ukaž nám kód, kterým ten formulář zpracováváš + i ten formulář.
Pokud validuješ mimetypes, tak může být problém na serveru (já jsem na jednom musel mimetypes doplňovat).
Nette Checker máš na tom serveru, kde to nefunguje ok?

Melmen
Člen | 132
+
0
-

btw ten adresář by měl mít práva 777 :)

Nodon
Člen | 8
+
0
-

Tady je kód:

    protected function createComponentAddPlaceForm()
    {
    $types = array(
    'Restaurace' => array(
        '1' => 'Kavárna',
        '2' => 'Pivnice',
        '3' => 'Vinárna',
        '4' => 'Restaurace',
        '5' => 'Pizzerie',
        '6' => 'Bar'
    ),
    'Ubytování' => array(
        '7' => 'Hotel',
        '8' => 'Penzion'
    ));
    $form = new Form;
    $form->addText('name', "Název:")
         ->addRule(Form::MIN_LENGTH, 'Název musí mít minimálně 3 znaky.', 3)
         ->addRule(Form::MAX_LENGTH, 'Název může být maximálně 30 znaků dlouhý.', 30)
         ->addRule(Form::FILLED, 'Název není vyplněno.');
    $form->addSelect('sub_type', 'Typ:', $types)
         ->setPrompt('Zvolte typ')
         ->addRule(Form::FILLED, 'Není zadán typ.');
    $form->addTextArea('description', 'Popis(max. 10000 znaků):')
         ->addRule(Form::MIN_LENGTH, 'Popis musí mít minimálně 100 znaků.', 100)
         ->addRule(Form::MAX_LENGTH, 'Popis je příliš dlouhý', 10000)
         ->addRule(Form::FILLED, 'Název není vyplněno.');
    $form->addText('adress1', "Ulice:")
         ->addRule(Form::MIN_LENGTH, 'Název ulice musí mít minimálně 3 znaky.', 3)
         ->addRule(Form::MAX_LENGTH, 'Název ulice může být maximálně 30 znaků dlouhý.', 30)
         ->addRule(Form::FILLED, 'Není vyplněna ulice.');
    $form->addText('adress2', "Číslo popisné:")
         ->addRule(Form::MAX_LENGTH, 'Číslo popisné může být maximálně 30 znaků dlouhé.', 30)
         ->addRule(Form::FILLED, 'Není vyplněno číslo popisné.');
    $form->addText('city', "Obec:")
         ->addRule(Form::MIN_LENGTH, 'Název obce musí mít minimálně 2 znaky.', 2)
         ->addRule(Form::MAX_LENGTH, 'Název obce může být maximálně 30 znaků dlouhý.', 30)
         ->addRule(Form::FILLED, 'Není vyplněn název obce.');
    $form->addText('psc', "PSČ:")
         ->addRule(Form::MIN_LENGTH, 'PSČ musí mít minimálně 3 znaky.', 3)
         ->addRule(Form::MAX_LENGTH, 'PSČ může být maximálně 10 znaků dlouhé.', 10)
         ->addRule(Form::FILLED, 'Není vyplněno PSČ.');
    $form->addText('www', "WWW:")
         ->addRule(Form::MAX_LENGTH, 'WWW adresa může být maximálně 10 znaků dlouhá.', 30);
    $form->addText('mail', "Mail:")
         ->addRule(Form::FILLED, 'Mail není vyplněn.')
         ->addRule(Form::EMAIL, 'Mail není ve správném formátu.');
    $form->addText('tel1', "Tel 1:")
         ->addRule(Form::MAX_LENGTH, 'Telefon 1 může být maximálně 10 znaků dlouhý.', 10);
    $form->addText('tel2', "Tel 2:")
         ->addRule(Form::MAX_LENGTH, 'Telefon 2 může být maximálně 10 znaků dlouhý.', 10);
    $form->addUpload('thumb', 'Náhledový obrázek:')
         ->addRule(Form::MAX_FILE_SIZE, 'Maximální velikost souboru je 5 MB.', 5000 * 1024 /* v bytech */);
    $form->addUpload('img1', 'Obrázek 1:')
         ->addRule(Form::MAX_FILE_SIZE, 'Maximální velikost obrázku 1 je 5 MB.', 5000 * 1024 /* v bytech */);
    $form->addUpload('img2', 'Obrázek 2:')
         ->addRule(Form::MAX_FILE_SIZE, 'Maximální velikost obrázku 2 je 5 MB.', 5000 * 1024 /* v bytech */);
    $form->addUpload('img3', 'Obrázek 3:')
         ->addRule(Form::MAX_FILE_SIZE, 'Maximální velikost obrázku 3 je 5 MB.', 5000 * 1024 /* v bytech */);
    $form->addSubmit('add', 'Přidat objekt');
    $form->onSuccess[] = callback($this, 'AddPlaceFormSubmitted');
    return $form;
   }

   public function AddPlaceFormSubmitted(Nette\Application\UI\Form $form){
    $values = $form->getValues();
    $path = $this->context->params['appDir']."/img/";
    $img = Array();
    $file = $values["thumb"];
    $info = @getimagesize($file);
    if ($file->isOk() && !(empty($info))) {
      $name = $path . md5($file->getName() . rand()) . time() . $file->getName();
      $name_s = $path . md5($file->getName() . rand()) . time() . "small" . $file->getName();
      $file->move($name);

      $image = Image::fromFile($name);
      $image->resize(NULL, 117);
      $image->save($name_s);

      $img[] = $name;
    }

    $file = $values["img1"];
    $info = @getimagesize($file);
    if ($file->isOk() && !(empty($info))) {
      $name = $path . md5($file->getName() . rand()) . time() . $file->getName();
      $file->move($name);
      $img[] = $name;
    }
    $file = $values["img2"];
    $info = @getimagesize($file);
    if ($file->isOk() && !(empty($info))) {
      $name = $path . md5($file->getName() . rand()) . time() . $file->getName();
      $file->move($name);
      $img[] = $name;
    }
    $file = $values["img3"];
    $info = @getimagesize($file);
    if ($file->isOk() && !(empty($info))) {
      $name = $path . md5($file->getName() . rand()) . time() . $file->getName();
      $file->move($name);
      $img[] = $name;
    }
    $this->model->AddPlace($values, $this->getUser()->getId(), $img);
    $this->flashMessage($name, 'success');
    $this->redirect('Profile:');
   }


}

Formulář nemá žádně rule pro upload protože když ho tam dám např. že musí být vyplněn nebo že to musí být obrázek tak mi to tu rule pořád vyhazuje jako by tam žádný obrázek ani nebyl.

Editoval Nodon (10. 2. 2012 13:00)

Nodon
Člen | 8
+
0
-

Tak jsem zkoušel v MultipleFileUpload Html4Singleupload a dělá mi to asi to samé, taky mě to trvadí že se to odeslalo ale když to po nahrání vypíše jaké soubory to nahrálo není tam ani jeden a v logu taky nic a na localhostu to jede. Jinak tady jsem spustil checker "":http://sepsemnapivo.cz/…/checker.php

Editoval Nodon (10. 2. 2012 13:55)

Nodon
Člen | 8
+
0
-

Zde je dump proměné $_FILES, vypadá to že tam jsou dva errory 6 a 4, podle definice prý UPLOAD_ERR_NO_TMP_DIR a UPLOAD_ERR_NO_FILE. No file bude asi tím že uploaduju pouze dva soubory z možných deseti takže proto NO FILE ale první dva které tam jsou mají NO_TMP_DIR. Co s tím?

array(11) { ["thumb"]=> array(5) { ["name"]=> string(12) "akinator.png" ["type"]=> string(0) "" ["tmp_name"]=> string(0) "" ["error"]=> int(6) ["size"]=> int(0) } ["img1"]=> array(5) { ["name"]=> string(10) "eshop1.jpg" ["type"]=> string(0) "" ["tmp_name"]=> string(0) "" ["error"]=> int(6) ["size"]=> int(0) } ["img2"]=> array(5) { ["name"]=> string(0) "" ["type"]=> string(0) "" ["tmp_name"]=> string(0) "" ["error"]=> int(4) ["size"]=> int(0) } ["img3"]=> array(5) { ["name"]=> string(0) "" ["type"]=> string(0) "" ["tmp_name"]=> string(0) "" ["error"]=> int(4) ["size"]=> int(0) } ["img4"]=> array(5) { ["name"]=> string(0) "" ["type"]=> string(0) "" ["tmp_name"]=> string(0) "" ["error"]=> int(4) ["size"]=> int(0) } ["img5"]=> array(5) { ["name"]=> string(0) "" ["type"]=> string(0) "" ["tmp_name"]=> string(0) "" ["error"]=> int(4) ["size"]=> int(0) } ["img6"]=> array(5) { ["name"]=> string(0) "" ["type"]=> string(0) "" ["tmp_name"]=> string(0) "" ["error"]=> int(4) ["size"]=> int(0) } ["img7"]=> array(5) { ["name"]=> string(0) "" ["type"]=> string(0) "" ["tmp_name"]=> string(0) "" ["error"]=> int(4) ["size"]=> int(0) } ["img8"]=> array(5) { ["name"]=> string(0) "" ["type"]=> string(0) "" ["tmp_name"]=> string(0) "" ["error"]=> int(4) ["size"]=> int(0) } ["img9"]=> array(5) { ["name"]=> string(0) "" ["type"]=> string(0) "" ["tmp_name"]=> string(0) "" ["error"]=> int(4) ["size"]=> int(0) } ["img10"]=> array(5) { ["name"]=> string(0) "" ["type"]=> string(0) "" ["tmp_name"]=> string(0) "" ["error"]=> int(4) ["size"]=> int(0) } }
duke
Člen | 650
+
0
-

Mohlo by jít o to, že máš na hostingu nastaven safe mode a výchozí upload_tmp_dir adresář neprojde kvůli omezení open_basedir.
Viz tento php bugreport.

Nodon
Člen | 8
+
0
-

Problém byl nakonec v tom že jsem omylem smazal adresář tmp…