Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> Upload
PawelC
post
Post #1





Grupa: Zarejestrowani
Postów: 1 173
Pomógł: 121
Dołączył: 24.09.2007
Skąd: Toruń

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


Witam mam pytanie, mam kod na upload plików, ale problem polega na tym że wrzuca mi pliki ze wszystkimi rozszerzeniami. I moje pytanie jest takie, jak ograniczyć upload plików tylko do plików z rozszerzeniem gif, jpg
Go to the top of the page
+Quote Post
qqrq
post
Post #2





Grupa: Zarejestrowani
Postów: 418
Pomógł: 8
Dołączył: 16.11.2006

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


Przed wywołaniem funkcji move_uploaded_file() sprawdzasz nazwę pliku (bodajże $_FILES['plik']['name']). Jeżeli zależy ci na bezpieczniejszym sprawdzaniu (wiadomo - rozszerzenie zawsze można zmienić), wgraj sobię paczkę PECL-a FILEINFO i tym sprawdzaj.
Go to the top of the page
+Quote Post
PawelC
post
Post #3





Grupa: Zarejestrowani
Postów: 1 173
Pomógł: 121
Dołączył: 24.09.2007
Skąd: Toruń

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


Mam teraz taki kod:
Kod
<?php
$uploaddir='c:/';
if($_FILES['plik1']['error']== UPLOAD_ERR_OK){
$new_name=$uploaddir.$_FILES['plik1']['name'];
$temp_name=$_FILES['plik1']['tmp_name'];
if(move_uploaded_file($temp_name,$new_name)){
echo "plik ok.\n";
}else{ print "blad\n";
}
}

?>

I działa poprawnie, ale nie wiem nadal jak ograniczyć do danego rozszerzenia

Ten post edytował ExPlOiT 2.11.2007, 13:40:27
Go to the top of the page
+Quote Post
Cysiaczek
post
Post #4





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




heheheh. Masz chyba dobry dzień ;p Akurat walczyłem z filtrami ;p
1.
  1. <?php
  2. abstract class imageFilterIterator extends FilterIterator
  3. {
  4. protected $accepted=array(
  5. ".jpg",
  6. ".png",
  7. ".gif",
  8. ".bmp"
  9. );
  10. }
  11. ?>


2,
  1. <?php
  2. class imageUploadFilter extends imageFilterIterator
  3. {
  4. protected $refused=array();
  5.  
  6. public function accept()
  7. {
  8. $file=$this->current();
  9. if(in_array(strrchr($file['name'], '.'), $this->accepted))
  10. {
  11. return true;
  12. }
  13. else
  14. {
  15. $this->refused[]=$file;
  16. return false;
  17. }
  18. }
  19.  
  20. function getRefused()
  21. {
  22. return $this->refused;
  23. }
  24.  
  25. function hasRefused()
  26. {
  27. if(count($this->getRefused())>0)
  28. {
  29. return true;
  30. }
  31. return false;
  32. }
  33. }
  34. ?>


Jak używać?
  1. <?php
  2. $filesToUpload=new imageUploadFilter(new ArrayIterator($_FILES));
  3. // i teraz już normalnie
  4. foreach($filesToUpload as $file)
  5. {
  6. //move_uploaded_file()
  7. }
  8. ?>

Pozdrawiam.
Go to the top of the page
+Quote Post
PawelC
post
Post #5





Grupa: Zarejestrowani
Postów: 1 173
Pomógł: 121
Dołączył: 24.09.2007
Skąd: Toruń

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


umieściłem ten kod co mi napisałeś w pliku skrypt2.php i po wybraniu pliku przechodzi do pliku skrypt2.php i wyskakuje mi
Cytat
Parse error: parse error in c:\usr\krasnal\www\cms\skrypt2.php on line 3

A ta linia to:
Kod
abstract class imageFilterIterator extends FilterIterator


Hehe nieźle nie dość że dostałem gotowca to jeszcze niewiem jak go użyć.
Go to the top of the page
+Quote Post
Cysiaczek
post
Post #6





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




Niemożliwe, zeby to to powodowało błąd (chyba, ze masz php4) sprawdź inne linijki.

Pozdrawiam.
Go to the top of the page
+Quote Post
PawelC
post
Post #7





Grupa: Zarejestrowani
Postów: 1 173
Pomógł: 121
Dołączył: 24.09.2007
Skąd: Toruń

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


Ok teraz działa, miałem w krasnalu na localhoscie ustawiony php4
Go to the top of the page
+Quote Post
tehn
post
Post #8





Grupa: Zarejestrowani
Postów: 63
Pomógł: 0
Dołączył: 8.09.2007

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


a może coś takiego:

  1. <?php
  2. if (!in_array($_FILES['plik1']['type'], array (
  3. 'image/jpeg',
  4. 'image/pjpeg'
  5. ))){
  6. echo 'Tylko jpg...';
  7. exit();
  8. }
  9. ?>


to tylko przykład na jpg... dla gifa będzie pewnie podobnie...
Go to the top of the page
+Quote Post
marcio
post
Post #9





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


a moze zamiast kombinowac to lepiej zrobic explode i zobaczyc czy ciag po kropce jest rowny
jpg
gif
png
ect......
(IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)
Go to the top of the page
+Quote Post
PawelC
post
Post #10





Grupa: Zarejestrowani
Postów: 1 173
Pomógł: 121
Dołączył: 24.09.2007
Skąd: Toruń

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


Hmm łatwo powiedzieć gorzej to wszystko połączyć w jedno. Ale dzięki za wskazówke.
Go to the top of the page
+Quote Post
marcio
post
Post #11





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


czemu ja php znam nie zadobrze ale tak to powinno wygladac przed move_uploaded_file()
  1. <?php
  2. $folder = '/odebrane/'.$_FILE['plik1']['tmp_name'];
  3. $explode = explode('.', $_FILES['plik1']['name']);
  4. if($explode[1] == 'jpg' || $explode[1] == 'gif' || $explode[1] == 'png') { 
  5. move_uploaded_file($_FILE['plik1']['tmp_name'], $folder);
  6. //i tu mozesz dac echo czy cos
  7. }
  8. ?>


Ten post edytował marcio 2.11.2007, 23:04:57
Go to the top of the page
+Quote Post
PawelC
post
Post #12





Grupa: Zarejestrowani
Postów: 1 173
Pomógł: 121
Dołączył: 24.09.2007
Skąd: Toruń

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


O lol ja w php bawię się od prawie 3 lat a na to niewpadłem.
Go to the top of the page
+Quote Post
marcio
post
Post #13





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


a ja sie bawie nie caly rok (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) i jak latwe nie a nie kombinowac na klasach przy tych -> to mozna nerwicy dostac
Go to the top of the page
+Quote Post
PawelC
post
Post #14





Grupa: Zarejestrowani
Postów: 1 173
Pomógł: 121
Dołączył: 24.09.2007
Skąd: Toruń

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


To fakt, ale tak już jest najłatwiejszy sposób na wszystko znajduje się dopiero wtedy kiedy wykonamy coś w najtrudniejszym z możliwych. Prawda jest taka że nie wszystkie rzeczy potrzebowałem, i dlatego niektórych prostych rzeczy niewiem, a gdy już je potrzebuje to niewiem od czego zacząć (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) Dobra koniec tego offtopa (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) Co do tych klass itp to masz racje, idzie szybko ześwirować

Ten post edytował ExPlOiT 2.11.2007, 23:05:48
Go to the top of the page
+Quote Post
marcio
post
Post #15





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


sorki byla literowka teraz jest dobrze poprawilem
Go to the top of the page
+Quote Post
Cysiaczek
post
Post #16





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




No panowie! Nie przsadzajcie. Akurat rozwiązanie, które podałem należy chyba do najlegantszych z możliwych i do tego zgodnych z OOP, z wykorzystaniem SPL... no kurde ; p

Zastępujemy to: (od ~marcia)
  1. <?php
  2. $folder = '/odebrane/'.$_FILE['plik1']['tmp_name'];
  3. $explode = explode('.', $_FILES['plik1']['name']);
  4. if($explode[1] == 'jpg' || $explode[1] == 'gif' || $explode[1] == 'png') { 
  5. move_uploaded_file($_FILE['plik1']['tmp_name'], $folder);
  6. //i tu mozesz dac echo czy cos
  7. }
  8. ?>


Tym.
  1. <?php
  2. $files=new imageUploadFilter(new ArrayIterator($_FILES));
  3. foreach($files as $file)
  4. {
  5. $folder='/odebrane/'.$file['tmp_name'];
  6. move_uploaded_file($file['tmp_name'], $folder);
  7. }
  8. ?>


Po co jakieś explode?
Ciekawe, co byś zrobił ~marcio z plikiem myFile.class.php. albo z to.jest.nazwa.pliku.png
Przyznam, że jakbym miał robić Waszymi sposobami, to by mnie chyba szlag trafił na miejscu :|

Pozdrawiam.

P.S
Rozpoznawanie typu mime mozecie sobie zrobić też łatwo, ale to już zostawiam wyobraźni ewentualnego użytkownika tego kodu. ;p
Go to the top of the page
+Quote Post
PawelC
post
Post #17





Grupa: Zarejestrowani
Postów: 1 173
Pomógł: 121
Dołączył: 24.09.2007
Skąd: Toruń

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


Cytat
Przyznam, że jakbym miał robić Waszymi sposobami, to by mnie chyba szlag trafił na miejscu :|

to teraz już wiesz dlaczego z dnia na dzień co raz to bardziej mi się żyć odechciewa (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
Cytat
Rozpoznawanie typu mime mozecie sobie zrobić też łatwo, ale to już zostawiam wyobraźni ewentualnego użytkownika tego kodu. ;p

Heheh czyli mam kolejne zajęcie (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

fakt Cysiaczek Twoje rozwiązanie działa na serwie z php5 a co z 4?
Go to the top of the page
+Quote Post
Cysiaczek
post
Post #18





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




Na 4 nie może działać i bardzo dobrze, że tak jest - tworząc jakiś nowy kod od podstaw nie bierze się wogóle pod uwagę tej wersji jezyka. Za kilka miesięcy php 6 ...

Pozdrawiam.

5 minut pracy:
  1. <?php
  2. abstract class imageFilterIterator extends FilterIterator
  3. {
  4. protected $acceptedExtensions=array(
  5. ".jpg",
  6. ".png",
  7. ".gif",
  8. ".bmp"
  9. );
  10.  
  11. protected $acceptedMimes=array(
  12. "image/jpg",
  13. "image/jpeg",
  14. "image/gif",
  15. "image/png",
  16. "image/bmp"
  17. );
  18. }
  19. ?>


  1. <?php
  2. class imageUploadFilter extends imageFilterIterator
  3. {
  4. protected $refused=array();
  5.  
  6. public function accept()
  7. {
  8. $file=$this->current();
  9. if(in_array(strrchr($file['name'], '.'), $this->acceptedExtensions) && in_array($file['type'], $this->acceptedMimes))
  10. {
  11. return true;
  12. }
  13. else
  14. {
  15. $this->refused[]=$file;
  16. return false;
  17. }
  18. }
  19.  
  20. function getRefused()
  21. {
  22. return $this->refused;
  23. }
  24.  
  25. function hasRefused()
  26. {
  27. if(count($this->getRefused())>0)
  28. {
  29. return true;
  30. }
  31. return false;
  32. }
  33. }
  34. ?>


Wartość tego rozwiązanie jest jednak niewielka, bo mime i tak nie jest poprawnie ropoznawane. Trzeba by zbadac plik już po uploadzie.

Pozdrawiam,
Go to the top of the page
+Quote Post
PawelC
post
Post #19





Grupa: Zarejestrowani
Postów: 1 173
Pomógł: 121
Dołączył: 24.09.2007
Skąd: Toruń

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


Fakt wartość tego rozwiązania może jest niewielka ale to zawsze coś (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) czyli rozumiem że ten kod i te poprzednie mam wrzucić np do pliku upload.php który jest wykonywany po wybraniu pliku w formularzu. Aha i wielkie dzięki za pomoc przy tym.
Go to the top of the page
+Quote Post
marcio
post
Post #20





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


Cysiaczek nie watpie w to ze php znasz lepiej odemnie ale jakos nie przepadam za OOP dlatego zrobilem z explode (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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: 25.08.2025 - 16:39