Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Upload pliku ze zmianą nazwy + miniatura
Forum PHP.pl > Forum > PHP
shpaque
Witam serdecznie - pozostał mi jedynie problem uploadu plików graficznych na serwer. Odkopałem jakiś miły i przejrzysty skrypt ale liczę na Waszą pomoc we wpasowaniu go do mojego kody oraz przede wszystkim zmiany na coś co chciałbym uzyskać. TZN skrypt jest taki:
  1. <?php
  2. $site_name = $_SERVER['HTTP_HOST'];
  3. $url_dir = "http://".$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']);
  4. $url_this = "http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];
  5. $upload_dir = "upload_files/"; // katalog do uploadu
  6. $upload_url = $url_dir."/upload_files/"; // URL uploadowanego pliku
  7. $mimes = array('image/jpeg','image/jpg'); // dozwolone typy plikow
  8. $max_size = 2; // max rozmiar pliku w MB
  9.  
  10. if (!is_dir($upload_dir)) die ("$upload_dir nie istnieje");
  11. if ($_FILES['userfile']) $message=do_upload($upload_dir, $upload_url);
  12. else $message="Wybierz plik do uploadu (max $max_size MB)";
  13. echo $message;
  14.  
  15. function do_upload($upload_dir, $upload_url)
  16. {
  17. $temp_name=$_FILES['userfile']['tmp_name'];
  18. $file_name=$_FILES['userfile']['name'];
  19. $file_type=$_FILES['userfile']['type'];
  20. $file_size=$_FILES['userfile']['size'];
  21. $result=$_FILES['userfile']['error'];
  22. $file_url=$upload_url.$file_name;
  23. $file_path=$upload_dir.$file_name;
  24.  
  25. global $mimes,$max_size;
  26. $max_size*=1024*1024;
  27. echo $max_size." ".$file_size;
  28. if (!in_array($file_type,$mimes)) return("Niedozwolony typ pliku: $file_type");
  29. if ($file_size>$max_size) return "Plik ma rozmiar wiekszy niz $max_size MB!";
  30. if ($file_name=="") return("Pusta nazwa pliku!");
  31.  
  32. chmod($temp_name,0777);
  33. $result=move_uploaded_file($temp_name, $file_path);
  34. $message="Typ pliku:".$file_type."<br>";
  35. $message.=($result) ? "URL do Twojego pliku: <a href='$file_url'>$file_url</a>" : "";
  36. return $message;
  37. }
  38. ?>
  39. <form name="dodaj" method="post" action="<?php echo basename(__FILE__); ?>" enctype="multipart/form-data" accept-charset="UTF-8" id="nowyForm1">
  40. <input type="file" id="plik" style="position:absolute;left:108px;top:210px;width:378px;height:21px;font-family:'Trebuchet MS';font-size:13px;z-index:4" name="plik" title="Możesz dodawać wyłącznie pliki graficzne z rozszerzeniem *.jpg"/></form>


teraz pytania co chciałbym uzyskać:
- aby pliki wgrywały się docelowo do katalogu "./../db/images" (oznaczenie 'wyjscia' na serwer jest potrzebne bo skrypt bedzie w innym katalogu)
- aby plik przyjmował nazwę zmiennej "$newkod.jpg" (w kodzie mojej strony podanym poniżej)
- aby rozmiar obrazu był zawsze w wysokosci 600px (szerokosc proporcjonalna)
- aby automatycznie byla tworzona miniatura w wielkosci 10% oryginalu z przedrostkiem "tn" - czyli "tn'.$newkod.'.jpg"
- aby to wkomponowac w moj kod:

  1. <?php
  2.  
  3. $error_message = "";
  4.  
  5. if ($_SERVER['REQUEST_METHOD'] == 'POST')
  6. {
  7. $action = isset($_POST['action']) ? $_POST['action'] : '';
  8. $kategoria = $_POST['kategoria'];
  9. $dbasename = $_POST['dbasename'];
  10. $database = './../db/'.$dbasename.'';
  11. $success_page = './nok.php';
  12.  
  13. if (!file_exists($database))
  14. {
  15. echo 'Nie odnaleziono bazy danych!';
  16. }
  17.  
  18. if ($action == 'dodaj')
  19. {
  20. $newkod = $_POST['kod'];
  21. $newopis = $_POST['opis'];
  22. $newcena = $_POST['cena'];
  23.  
  24. $items = file($database);
  25. foreach($items as $line)
  26. {
  27. list($zdjecie, $kod, $opis, $cena, $status) = explode('|', trim($line));
  28. if ($newkod == $kod)
  29. {
  30. $error_message = 'Wygenerowany kod już istnieje! Odśwież formularz w celu wygenerowania nowego kodu.';
  31. break;
  32. }
  33. }
  34. if (empty($error_message))
  35. {
  36. $file = fopen($database, 'a');
  37. fwrite($file, $newkod);
  38. fwrite($file, '.jpg|');
  39. fwrite($file, $newkod);
  40. fwrite($file, '|');
  41. fwrite($file, $newopis);
  42. fwrite($file, '|');
  43. fwrite($file, $newcena);
  44. fwrite($file, '|1');
  45. fwrite($file, "\r\n");
  46. fclose($file);
  47. header('Location: '.$success_page);
  48. }
  49. }
  50. }
  51. ?>


ogromne dzięki z góry za pomoc
nospor
ad1
ad2
move_uploaded_file() to przenosi plik tam gdzie chcesz. Więc dwa pierwsze punkty załatwiasz tym
shpaque
Czyli teraz mamy takie coś i Ad1 może już odpaść (napisałeś że ad2 tez - a gdzie i jak zmienci nazwe pliku?)
  1. <?php
  2. $site_name = $_SERVER['HTTP_HOST'];
  3. $url_dir = "http://".$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']);
  4. $url_this = "http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];
  5. $upload_dir = "images/"; // katalog do uploadu
  6. $upload_url = $url_dir."./../db/images/"; // URL uploadowanego pliku
  7. $mimes = array('image/jpeg','image/jpg'); // dozwolone typy plikow
  8. $max_size = 2; // max rozmiar pliku w MB
  9.  
  10. if (!is_dir($upload_dir)) die ("$upload_dir nie istnieje");
  11. if ($_FILES['userfile']) $message=do_upload($upload_dir, $upload_url);
  12. else $message="Wybierz plik do uploadu (max $max_size MB)";
  13. echo $message;
  14.  
  15. function do_upload($upload_dir, $upload_url)
  16. {
  17. $temp_name=$_FILES['userfile']['tmp_name'];
  18. $file_name=$_FILES['userfile']['name'];
  19. $file_type=$_FILES['userfile']['type'];
  20. $file_size=$_FILES['userfile']['size'];
  21. $result=$_FILES['userfile']['error'];
  22. $file_url=$upload_url.$file_name;
  23. $file_path=$upload_dir.$file_name;
  24.  
  25. global $mimes,$max_size;
  26. $max_size*=1024*1024;
  27. echo $max_size." ".$file_size;
  28. if (!in_array($file_type,$mimes)) return("Niedozwolony typ pliku: $file_type");
  29. if ($file_size>$max_size) return "Plik ma rozmiar większy niż $max_size MB!";
  30. if ($file_name=="") return("Pusta nazwa pliku!");
  31.  
  32. chmod($temp_name,0777);
  33. $result=move_uploaded_file($temp_name, $file_path);
  34. $message="Typ pliku:".$file_type."<br>";
  35. $message.=($result) ? "URL do Twojego pliku: <a href='$file_url'>$file_url</a>" : "";
  36. return $message;
  37. }
  38. ?>
nospor
No przecież drugim argumentem move_uploaded_file() jest nazwa pliku wraz ze ścieżką. Właśnie tam masz zmienić na to co chcesz mieć.
shpaque
nie wiem... nie rozumiem...

przede wszystkim - juz oczywiscie na samym poczatku mam problem, bo skrypt bedzie w pliku "./admin/nowy.php" i tak wskazuje "http://".$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']); ,ale nie wime jak z tego katalogu wyjsc na "/../db/images" bo ta sciezka nie dziala wychodzi cos takiego:
  1. http://smusic.nazwa.pl/_test/admin/../db/images/
jak zrobic zeby przeczytal po $_SERVER['HTTP_HOST'] tylko jeden katalog dalej? albo jak wyjsc z katalogu ADMIN i przejsc do db/images..?
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.