Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Upload
Forum PHP.pl > Forum > Przedszkole
phpek
Witam mam skrypt ktory uploaduje zdjecia a ja nie wiem jak go przerobic aby mozna bylo uploadowac zdjecia oraz muzyke oto kod
  1. <?php
  2.  
  3. $site_name = $_SERVER['HTTP_HOST'];
  4. $url_dir = "http://".$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']);
  5. $url_this = "http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];
  6.  
  7. $upload_dir = "upload_files/";
  8. $upload_url = $url_dir."/upload_files/";
  9. $message ="";
  10.  
  11. //create upload_files directory if not exist
  12. //If it does not work, create on your own and change permission.
  13. if (!is_dir("upload_files")) {
  14. die ("upload_files directory doesn't exist");
  15. }
  16.  
  17. if ($_FILES['userfile']) {
  18. $message = do_upload($upload_dir, $upload_url);
  19. }
  20. else {
  21. $message = "Invalid File Specified.";
  22. }
  23.  
  24. print $message;
  25.  
  26. function do_upload($upload_dir, $upload_url) {
  27.  
  28. $temp_name = $_FILES['userfile']['tmp_name'];
  29. $file_name = $_FILES['userfile']['name'];
  30. $file_type = $_FILES['userfile']['type'];
  31. $file_size = $_FILES['userfile']['size'];
  32. $result = $_FILES['userfile']['error'];
  33. $file_url = $upload_url.$file_name;
  34. $file_path = $upload_dir.$file_name;
  35.  
  36. //File Name Check
  37. if ( $file_name =="") {
  38. $message = "Invalid File Name Specified";
  39. return $message;
  40. }
  41. //File Size Check
  42. else if ( $file_size > 500000) {
  43. $message = "The file size is over 500K.";
  44. return $message;
  45. }
  46. //File Type Check
  47. else if ( $file_type == "text/plain" ) {
  48. $message = "Sorry, You cannot upload any script file" ;
  49. return $message;
  50. }
  51.  
  52. $result = move_uploaded_file($temp_name, $file_path);
  53. $message = ($result)?"File url <a href=$file_url>$file_url</a>" :
  54. "Somthing is wrong with uploading a file.";
  55.  
  56. return $message;
  57. }
  58. ?>
  59. <form name="upload" id="upload" ENCTYPE="multipart/form-data" method="post">
  60. Upload Image<input type="file" id="userfile" name="userfile">
  61. <input type="submit" name="upload" value="Upload">
  62. </form>
  63.  


z gory dziekuje
b4rt3kk
Wyrzuć ten fragment kodu:

  1. //File Type Check
  2. else if ( $file_type == "text/plain" ) {
  3. $message = "Sorry, You cannot upload any script file" ;
  4. return $message;


co jednak spowoduje, że będzie można uploadować każdy rodzaj pliku, więc proponuje zastąpić ten fragment kodu takim:

  1. $tablica=explode(".",$file_name); // to możesz dać zaraz na początku, po function do_upload($upload_dir, $upload_url){
  2.  
  3. else if ( ( $tablica[1]!="mp3" ) OR ( $tablica[1]!="jpg" ) ) // możesz wstawiać dowolne rozszerzenia jakie chcesz by akceptował skrypt wedle powyższego schematu. tzn. wstawiaj po OR ( $tablica[1]!="rozszerzenie_pliku" )
  4. {
  5. $message = "Sorry, You cannot upload this type file" ;
  6. return $message;
  7. }
masiakla
Cytat(b4rt3kk @ 6.09.2010, 20:23:05 ) *
Wyrzuć ten fragment kodu:

  1. //File Type Check
  2. else if ( $file_type == "text/plain" ) {
  3. $message = "Sorry, You cannot upload any script file" ;
  4. return $message;


co jednak spowoduje, że będzie można uploadować każdy rodzaj pliku, więc proponuje zastąpić ten fragment kodu takim:
[php][/php]

Ale muzyka nie idzie w text/plain, to są pliki binarne. Nie widzę tu żadnego zabezpieczenia przed wrzucaniem mp3 tudzież innych plików jak tekstowych nieformatowanych. A właśnie brak dokładnego sprawdzania mime, powoduje iż można wsadzić nawet text/plain, zdziebka modyfikując zagłówki wysyłane do serwera, w tych sprawach nie powinno się ufać temu co wysyła użytkownik.
sido
jak zawsze kłania się manual php..

wywal kod o którym mówił poprzednik i wstaw do skryptu coś w tym rodzaju:

  1. $dozwolone_rozszerzenia = array("jpg","jpeg","gif","png","mp3");
  2.  
  3. if ($file_name > '') {
  4. if (!in_array(end(explode(".",
  5. strtolower($file_name ))),
  6. $dozwolone_rozszerzenia)) {
  7. die($file_name .' - dozwolone są tylko pliki graficzne oraz mp3');
  8. }
  9. }
masiakla
Jeszcze raz od początku, te linie co chcą byś wyrzucił wcale nic nie mają do uploadu jakichkolwiek plików, po za może plikami tekstowymi. Jedyne co stoi na przeszkodzie, tak mniemam, jest dla ciebie rozmiar pliku, który został tu ustawiony na sztywno i wynosi 500000 bajtów, czyli niespełna pół mega(mp3 niestety często bywają większe). Zmień ta wartość na większą i wyślesz bez problemu, jedyne co może zagrozić to ustawienia php.ini, ale zapewne są one większe).

Pliki mp3 idą z takim mime audio/mpeg, nie jest to text/plain, więc skrypt nie odrzuci takowego pliku.a sprawdzanie typu mime pliku na podstawie tego co nam mówi użytkownik to zło, bo mimo tego prymitywnego zabezpieczenia wrzucić tam powiedzmy skrypt php to pestka, dla kogoś kto ma nawet niewielkie pojęcie o działaniu protokołu http, ale to uwaga taka mimo chodem. Sprawdzanie rozszerzenia też nie jest najlepszym sposobem.

Poniżej łap na szybko przerobiony pliczek w którym możesz na początku ustawić maksymalny rozmiar pliku.
  1. <?php
  2.  
  3. $site_name = $_SERVER['HTTP_HOST'];
  4. $url_dir = "http://".$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']);
  5. $url_this = "http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];
  6.  
  7. $upload_dir = "upload_files/";
  8. $upload_url = $url_dir."/upload_files/";
  9. $max_file_size = 5*1024*1024*1024; //limit wrzucanego pliku do 5 mega
  10.  
  11. $message ="";
  12.  
  13. //create upload_files directory if not exist
  14. //If it does not work, create on your own and change permission.
  15. if (!is_dir("upload_files")) {
  16. die ("upload_files directory doesn't exist");
  17. }
  18.  
  19. if ($_FILES['userfile']) {
  20. $message = do_upload($upload_dir, $upload_url);
  21. }
  22. else {
  23. $message = "Invalid File Specified.";
  24. }
  25.  
  26. print $message;
  27.  
  28. function do_upload($upload_dir, $upload_url) {
  29.  
  30. $temp_name = $_FILES['userfile']['tmp_name'];
  31. $file_name = $_FILES['userfile']['name'];
  32. $file_type = $_FILES['userfile']['type'];
  33. $file_size = $_FILES['userfile']['size'];
  34. $result = $_FILES['userfile']['error'];
  35. $file_url = $upload_url.$file_name;
  36. $file_path = $upload_dir.$file_name;
  37.  
  38. //File Name Check
  39. if ( $file_name =="") {
  40. $message = "Invalid File Name Specified";
  41. return $message;
  42. }
  43. //File Size Check
  44. else if ( $file_size > $max_file_size) {
  45. $message = "The file size is over max size.";
  46. return $message;
  47. }
  48. //File Type Check
  49. else if ( $file_type == "text/plain" ) {
  50. $message = "Sorry, You cannot upload any script file" ;
  51. return $message;
  52. }
  53.  
  54. $result = move_uploaded_file($temp_name, $file_path);
  55. $message = ($result)?"File url <a href=$file_url>$file_url</a>" :
  56. "Somthing is wrong with uploading a file.";
  57.  
  58. return $message;
  59. }
  60. ?>
  61. <form name="upload" id="upload" ENCTYPE="multipart/form-data" method="post">
  62. Upload Image<input type="file" id="userfile" name="userfile">
  63. <input type="submit" name="upload" value="Upload">
  64. </form>
phpek
Ok zmiana rozmiaru niby pomogła ale gdy chce wrzucic muzyke o formacie mp3 nie dziala a za to gre o napewno wiekszym rozmiarze wrzuca bez problemu
masiakla
Egh rąbłem się w liczeniu jest o jedno 1024 za dużo powinno być 5*1024*1024, ale to nie zmienia faktu, że to powinno działać. Wyświetla tobie jakiś błąd czy coś ?
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.