Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Klasa upload
Forum PHP.pl > Forum > Gotowe rozwiązania > Algorytmy, klasy, funkcje
potreb
Witam. Napisałem bardzo prostą klasę uploadu plików na serwer. Proszę o jakieś uwagi.
Całość u mnie działa, więc teraz potrzebuję uwag, co można zmienić, wyrzucić itp.

  1. class Upload {
  2. public $extensions = array('.jpg','.png','.gif','.doc','.rtf','.pdf','.sql','.txt');
  3. public $prefix;
  4. public $max_size;
  5. public $cf;
  6. public $info;
  7.  
  8. private $tmp_name;
  9. private $name;
  10. private $error;
  11. private $size;
  12.  
  13.  
  14. public function __construct() {
  15. if(isset($_FILES['file']) && is_array($_FILES['file'])) {
  16. $this->tmp_name = $_FILES['file']['tmp_name'];
  17. $this->name = $_FILES['file']['name'];
  18. $this->error = $_FILES['file']['error'];
  19. $this->size = $_FILES['file']['size'];
  20. }
  21.  
  22. $this->max_size = 200000;
  23. $this->cf = 3;
  24. }
  25.  
  26. private function uploadExt($v) {
  27. $str = (strpos($v,'.')===false?'':'.'.substr(strrchr($v, "."), 1));
  28. return $str;
  29. }
  30.  
  31. private function uploadName($v) {
  32. $str = preg_replace('/[^0-9a-zA-Z-\_.]/', '', $v);
  33. return $str;
  34. }
  35.  
  36. private function uploadPrefix()
  37. {
  38. if(!$this->prefix) {
  39. $prefix = date("ymds_");
  40. return $prefix;
  41. } else {
  42. return $this->prefix;
  43. }
  44. }
  45.  
  46. public function uploadFiles($upload_dir)
  47. {
  48. for($i=0; $i<$this->cf;$i++)
  49. {
  50. if($this->name[$i])
  51. {
  52. if(in_array($this->uploadExt($this->name[$i]), $this->extensions))
  53. {
  54. if($this->size[$i] <= $this->max_size)
  55. {
  56. $target = $upload_dir . $this->uploadPrefix() . $this->uploadName($this->name[$i]);
  57. if(move_uploaded_file($this->tmp_name[$i],$target)) {
  58. $this->info[] = "Plik został wysłany";
  59. } else {
  60. $this->info[] = "Nie można wysłać pliku";
  61. }
  62.  
  63. } else
  64. {
  65. $this->info[] = "Rozmiar pliku przekracza dopuszczalną wartość!";
  66. }
  67. } else
  68. {
  69. $this->info[] = "Plik o tym rozszerzeniu nie może być wysłany!";
  70. }
  71. } else {
  72. $this->info[] = "Plik nie został wybrany";
  73. }
  74. }
  75. }
  76.  
  77. }
  78.  
  79. $upload = new Upload;
  80. $upload->cf = 2;
  81.  
  82. if(isset($_POST['upload'])) {
  83. $upload->max_size = 144550333;
  84. $upload->extensions = array('.png','.sql','.txt');
  85.  
  86. $upload->uploadFiles('./files/');
  87. foreach($upload->info as $value) {
  88. echo "<p>".$value."</p>";
  89. }
  90. }
  91.  
  92.  
  93.  
  94. echo "<form action='index.php' method='post' enctype='multipart/form-data'>";
  95. for($i=0;$i<$upload->cf;$i++) {
  96. echo "<p><input name='file[]' type='file' /></p>";
  97. }
  98. echo "<p><input type='submit' name='upload' value='Upload' /></p></form>";
Spawnm
Przenoszę smile.gif

Przenoszę smile.gif
ayeo
Witam!

Niewiele to ma wspólnego z OOP. Równie dobrze mogłeś zrobić samą funkcję uploadFiles(); Rozszerzenia zapisane są na sztywno w samej klasie, brak sprawdzania MIME. Co z rozszerzeniami typu .tar.gz? Brak jakiejkolwiek kontroli nad nazwą pliku. Klasa uzależniona od formularza (nazwa inputa), a dodatkowo pozwalająca na upload jednego pliku. Konstruktor powinien brać chyba nazwę inputa jako parametr, wtedy można uploadować dowolna ilość plików. Nie jestem pewien, ale tablica na komunikaty jest zbędna - wykluczają się wzajemnie. Samo API klasy też pozostawia wiele do życzenia. Ogólnie mówiąc nic specjalnego.

Pozdrawiam!
potreb
Dzięki za uwagi. Wiem, że to jest nic specjalnego i nie będzie.
Typy plików nie są ustawione na sztywno tylko w klasie, bo możesz ustawić własne.
Nazwa pliku jest czyszczona z niepotrzebnych znaków także kontrola nazwy jest. Także możliwość wysyłania wielu plików.
Wiem za API i ogólnie wszystko pozostawia wiele do życzenia, tak jak mówisz można zrobić wszystko w jednej funkcji.
BTW chcę czegoś się nauczyć, a zaczynanie od gotowych rzeczy to ominięcie
mijagi
Dodaj jakiś warunek sprawdzający poprawnośc obrazków, da się uploadować skrypt z rozszerzeniem obrazka. Później na stronie będą błędy o nieprawidłowych obrazkach. Sprawdzaj to np. getimagesize, a tu masz link pomocniczy : http://mijagi.interkuza.pl/index.php/2009/...-uploadu-w-php/
skowron-line
  1. private function uploadExt($v) {
  2. $str = (strpos($v,'.')===false?'':'.'.substr(strrchr($v, "."), 1));
  3. return $str;
  4. }

Zainteresuj się takową funkcją zamiast pisać jakieś cuda na kiju.
http://pl.php.net/manual/pl/function.pathinfo.php
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-2024 Invision Power Services, Inc.