Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [klasa] Uploader
Forum PHP.pl > Forum > Gotowe rozwiązania > Algorytmy, klasy, funkcje
bim2
Jest to moja pierwsza klasa więc proszę o wyrozumiałość. Pierwsza klasa OPUBLIKOWANA (zeby nie było ;P)
  1. <?php
  2. //Klasa by BIM
  3. // <a href="http://nfscg.info" target="_blank">http://nfscg.info</a>
  4. // @version 1.0
  5. // mail: bimhernas@gmail.com
  6. class uploads
  7. {
  8. var $typ = array();
  9. var $conf=array("folder" => "all");
  10. var $error=NULL;
  11. var $name;
  12. // Funkacja uploadujaca
  13. function move($nazwa) // wywołanie: $up->move( nazwa_zmiennej_inputa);
  14. {
  15. if (!is_uploaded_file($_FILES[$nazwa]['tmp_name'])) 
  16. {
  17. $this->error[] = 'Funkcja is_uploaded_file() nie pozwoliła na upload tego pliku';
  18. }
  19. if(!in_array($_FILES[$nazwa]['type'], $this->typ))
  20. {
  21. foreach($this->typ AS $typ)
  22. {
  23. if(!isset($typy))
  24. {
  25. $typy=$typ;
  26. }
  27. else
  28. {
  29. $typy .= ','.$typ;
  30. }
  31. }
  32.  
  33. $this->error[] = 'Nie dozwolony typ mime. Dozwolone typty to: '.$typy.' , a twój typ to '.$_FILES[$nazwa]['type'];
  34.  
  35. }
  36. if(!is_dir('uploads/'.$this->conf['folder']))
  37. {
  38. $this->error[] = 'Źle ustawiłeś katalog.';
  39.  
  40. if(!is_writable('uploads/'.$this->conf['folder']))
  41. {
  42. $this->error[] = 'Katalog ma Ľle ustawione mody (czyt. chmody). Ustaw je na 0777';
  43. }
  44. }
  45. ########################
  46. $aa=explode('.', $_FILES[$nazwa]['name']);
  47. $roz = $aa[(count($aa)-1)];
  48. if($this->error=='')
  49. {
  50. $klucz=uniqid(md5(time()));
  51. if(move_uploaded_file($_FILES[$nazwa]['tmp_name'], 'uploads/'.$this->conf['folder'].'/'.$klucz.'.'.$roz))
  52. {
  53. $this->name = $klucz.'.'.$roz;
  54. return TRUE;
  55. }
  56. else
  57. {
  58. $this->error[] = 'Bład przy uploadowaniu pliku. Skontaktuj się z administratorem.';
  59. }
  60. }
  61. return FALSE;
  62. }
  63.  
  64. /* Zmienia ustawienia  */
  65. function set($co, $value)
  66. {
  67. $this->conf[$co]=$value;
  68. }
  69. /*  Ustawia dozwolone typy */
  70. function type($dozwolone)
  71. {
  72. if(is_array($dozwolone))
  73. {
  74. $this->typ=$dozwolone;
  75. }
  76. else
  77. {
  78. $this->typ=array($dozwolone);
  79. }
  80. }
  81. }
  82. ?>

Wywołania:
  1. <?
  2.  
  3. $up = new uploads;
  4. echo '<form method="POST" action="'.$_SERVER['PHP_SELF'].'" ENCTYPE="multipart/form-data">
  5. <input type="file" name="file" size="20" class="input">
  6. <input type="hidden" name="a" value="b" /><input type="submit" value="upload" /></form>';
  7. if($_POST['a']=='b')
  8. {
  9. $up->set('folder', 'test');
  10. $up->type(array('image/gif', 'text/plain'));
  11. if($up->move('file'))
  12. {
  13. echo 'OK';
  14. }
  15. else
  16. {
  17. print_r($up->error);
  18. }
  19. }
  20.  
  21. ?>
Cysiaczek
smile.gif :| sad.gif i tak się wyżyję. Zastanawia mnie, dlaczego zrobiłeś klasę, skoro już pierwsza metoda move() posiada w swoim ciele odwołania do zmiennych globalnych $_FILES? Wiem, że plików to w innych nie ma, ale nie mimo to ładniej wygląda jak klasa jest uniwersalna. Może ktoś zechce kiedyś użyc tej klasy w inny nieco sposób.
Ale to tylko tak... ehh nieważne - czepiam się smile.gif
bim2
To ja nie wiem jakim cudem chcesz uzyć uploadu bez $_FILES?? Ta klasa jest do my cms , uploaduje download, avatary obrazki do newsa itepede. Nie musze przy każdym uploadowaniu sprawdzać zabezpeczenia. Wystarczy że wywołam jedna klasę ;P. Moge dowolnie zmieniac też zabezpieczenia, np typt mime biggrin.gif
grzegorz_w
pomysłowe, nawet widzę dobre zastosowanie tego kodu smile.gif
bim2
THX, to moje pierwsza udostępniona klasa happy.gif ja to stosuje tam gdzie uploaduje i nie musze dbać przy każdym uploadzie o bezpieczeństwo bo mam to zapewnione smile.gif
grzegorz_w
zapewnione, to znaczy?.
bim2
To znaczy, ze nie powinienem dostac po oczach WARNING z cmodami, czy ze nie ma katalogu smile.gif. I jest is_uploaded dlatego nie muszze tego dodawac.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.