Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Upload
PawelC
post 2.11.2007, 13:10:46
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
2 Stron V   1 2 >  
Start new topic
Odpowiedzi (1 - 19)
qqrq
post 2.11.2007, 13:14:39
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 2.11.2007, 13:16:31
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 2.11.2007, 13:44:45
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.


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post
PawelC
post 2.11.2007, 13:56:13
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 2.11.2007, 14:05:57
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.


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post
PawelC
post 2.11.2007, 14:18:40
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 2.11.2007, 14:37:11
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...


--------------------
sidzina
Go to the top of the page
+Quote Post
marcio
post 2.11.2007, 22:35:04
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......
questionmark.gifquestionmark.gifquestionmark.gif


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
PawelC
post 2.11.2007, 22:41:39
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 2.11.2007, 22:51:22
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


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
PawelC
post 2.11.2007, 22:57:40
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 2.11.2007, 23:01:43
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 biggrin.gif i jak latwe nie a nie kombinowac na klasach przy tych -> to mozna nerwicy dostac


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
PawelC
post 2.11.2007, 23:05:01
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ąć biggrin.gif Dobra koniec tego offtopa 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 2.11.2007, 23:05:20
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


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
Cysiaczek
post 2.11.2007, 23:51:40
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


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post
PawelC
post 3.11.2007, 00:00:52
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 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 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 3.11.2007, 00:19:12
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,


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post
PawelC
post 3.11.2007, 00:22:25
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ś 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 3.11.2007, 00:29:34
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 biggrin.gif


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 25.07.2025 - 10:50