Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [ZendFramework]Wysyłanie pliku
gazelek
post
Post #1





Grupa: Zarejestrowani
Postów: 85
Pomógł: 3
Dołączył: 28.02.2008

Ostrzeżenie: (0%)
-----


Witam!
Na wstepie kawalki kodu:
Tworzenie formularza
Kod
'img' => array(
                        'file',
                        array(
                            'label' => 'Obrazek',
                            'Destination' => 'obrazki/'
                        )
                    ),
                    'plik' => array(
                        'file',
                        array(
                            'label' => 'Gra',
                            'Destination' => 'gry/'
                        )
                    ),
                    'sciezka' => array(
                        'text',
                        array(
                            'label' => 'lub podaj lokalizacje',
                            'required' => 'false'
                        )
                    ),

Dla objasnienia - kazdy rekord ma plik obrazka (img) oraz dodatkowy plik(dodawany z dysku, wtedy wykorzystane jest pole 'plik', lub z lokalizacji sieciowej - wtedy 'sciezka')

Dodawanie:
Kod
        $adapter=$form->img->getTransferAdapter();
        $file = substr($adapter->getFileName('img'),strlen('obrazki/'));
        if($adapter->receive()){
            $dane['img']=$file;
        }

            $adapter1=$form->plik->getTransferAdapter();
            $file=substr($adapter1->getFileName('plik'),strlen('gry/'));
        if($adapter1->receive()){
            $this->view->chu="niechu";
            $sciezka=$file;
        }
        else { //jesli nie udalo sie przeslac
            $sciezka=$this->_request->getPost('sciezka');
            $this->view->chu="chu";
        }
        $dane['path']=$sciezka;

Zmienna 'chu' - tylko do testow, dzieki niej wyswietlam sobie na stronie, ktora czesc zostala wykonana. Jaki jest problem? Po uzupelnieniu formularza i zatwierdzeniu otrzymuje:

Cytat
The file 'img' was illegal uploaded, possible attack


Atak sam na siebie?(IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Czy czasem nie jest tak, ze wymagana jest zmiana pliku po wyslaniu (tak, juz wiem, ze robi sie to za pomoca klasy Zend_Filter_File_Rename)? Chyba, ze powod jest inny - a mi nic do glowy nie przyszlo...

Dodam, ze na stronie wyswietla sie po wykonaniu, procz powyzszego ostrzezenia rowniez 'niechu' - co oznacza, ze $adapter1->receive() zwrocilo 0.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
EarthCitizen
post
Post #2





Grupa: Zarejestrowani
Postów: 286
Pomógł: 70
Dołączył: 13.01.2009

Ostrzeżenie: (0%)
-----


Cytat
$adapter1->receive() zwrocilo 0


Jak dla mnie to po prostu pole img jest puste i nic się nie przesyła. A wygenerowany kod formularza jest prawidłowy?
Go to the top of the page
+Quote Post
gazelek
post
Post #3





Grupa: Zarejestrowani
Postów: 85
Pomógł: 3
Dołączył: 28.02.2008

Ostrzeżenie: (0%)
-----


Tak, formularz jest ok. Popatrzylem po folderach - img sie przesyla, jest kopiowane do folderu obrazki, ale to drugie kopiowanie sie juz nie wykonuje....

Dokladnie: img sie przesyla ($adapter->receive() zwraca 1, do tablicy wpisywana jest nazwa pliku), wypluwane jest ostrzezenie i 'plik' juz nie jest przesylany ($adapter1->receive() zwraca 0, a sciezka wogole jest pusta)

Ten post edytował gazelek 20.01.2009, 13:20:52
Go to the top of the page
+Quote Post
qba_rox
post
Post #4





Grupa: Zarejestrowani
Postów: 29
Pomógł: 1
Dołączył: 12.01.2009
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Pobierajac adapter:

  1. <?php
  2. $adapter=$form->img->getTransferAdapter();
  3. ?>


pobierasz ustawienia dla jednego inputa ('img' w tym wypadku).
Wywolujac metode

  1. <?php
  2. $adapter->receive()
  3. ?>

probojesz walidowac, filtrowac i przeniesc wszystkie pliki, ktore zostaly przeslane, twoj pierwszy plik zostanie prawidlowo obsluzony, bo dostarczyles jego ustawienia, natomiast, drugi bedzie obsluzony z ustawieniami domyslnymi, wiec np nie zostanie przeniesiony tam gdzie chcesz, tylko zostanie w folderze tymczasowym. I co najwazniejsze, po obsludze kazdego z tych plikow zostaje ustawiona flaga, ze zostal obsluzony.
Dalej, probojesz powtorzyc to samo wraz z ustawieniami dla drugiego pliku, z tym ze problem jest taki, ze probojesz to zrobic dla oflagowanych juz plikow. dlatego jest wyrzucany wyjatek. Rozwiazanie jest bardzo proste:

  1. <?php
  2. $adapter=$form->img->getTransferAdapter();        
  3. $adapter->receive('img');
  4. $adapter1=$form->plik->getTransferAdapter();
  5. $adapter1->receive('plik');
  6. ?>
Go to the top of the page
+Quote Post
gazelek
post
Post #5





Grupa: Zarejestrowani
Postów: 85
Pomógł: 3
Dołączył: 28.02.2008

Ostrzeżenie: (0%)
-----


... i na koniec dopiero sprawdzenie metoda receive(), czy transfer zostal wykonany. Piekne dzieki (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Jeszcze pytanie (z racji, ze nie mam czasu teraz tego sprawdzic) - czy to jest rozwiazanie problemu dla wyrzucanego ostrzezenia? Tresc jak w pierwszym poscie, possible attack.

Ten post edytował gazelek 20.01.2009, 15:39:30
Go to the top of the page
+Quote Post
qba_rox
post
Post #6





Grupa: Zarejestrowani
Postów: 29
Pomógł: 1
Dołączył: 12.01.2009
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


raczej metoda isRecived(); i tak, nie bedziesz mial juz tego wyjatku, wszystkoa ladnie pojdzie
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 14.09.2025 - 19:58