Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Nie wiem jak zmodyfikować upload zdjęc
Forum PHP.pl > Forum > Przedszkole
lukaszk
Witam, mam taki fragment kodu który znakomicie działa jako upload.
Mam problem z modyfikacją.

Zależy mi aby każde zdjęcie miało unikalną nazwę (ze względów bezpieczeństwa i nie tylko)

Czyli np coś takigo jako nazwa pliku

  1. function GenerateUniqueID()
  2. {
  3. return md5(uniqid(rand(),1));
  4. }
  5. $uniq_id=GenerateUniqueID();


Sam kod uploadu

  1. <?php
  2. class fileDir {
  3. private $fileInfo;
  4. private $fileLocation;
  5. private $error;
  6. private $direct;
  7.  
  8. function __construct($dir){
  9. $this->direct = $_SERVER['DOCUMENT_ROOT'].$dir;
  10. if(!is_dir($this->direct)){
  11. die('Supplied directory is not valid: '.$this->direct);
  12. }
  13. }
  14.  
  15. function upload($theFile){
  16. $this->fileInfo = $theFile;
  17. $this->fileLocation = $this->direct . $this->fileInfo['name'];
  18. if(!file_exists($this->fileLocation)){
  19. if(move_uploaded_file($this->fileInfo['tmp_name'], $this->fileLocation)){
  20. return 'File was successfully uploaded';
  21. } else {
  22. return 'File could not be uploaded';
  23. $this->error = "Error: File could not be uploaded.\n";
  24. $this->error .= 'Here is some more debugging info:';
  25. $this->error .= print_r($_FILES);
  26. }
  27. } else {
  28. return 'File by this name already exists';
  29. }
  30. }
  31. function overwrite($theFile){
  32. $this->fileInfo = $theFile;
  33. $this->fileLocation = $this->direct . $this->fileInfo['name'];
  34. if(file_exists($this->fileLocation)){
  35. $this->delete($this->fileInfo['name']);
  36. }
  37. return $this->upload($this->fileInfo);
  38. }
  39. function location(){
  40. return $this->fileLocation;
  41. }
  42. function fileName(){
  43. return $this->fileInfo['name'];
  44. }
  45.  
  46. function delete($fileName){
  47. $this->fileLocation = $this->direct.$fileName;
  48. if(is_file($this->fileLocation)){
  49. unlink($this->fileLocation);
  50. return 'Your file was successfully deleted';
  51. } else {
  52. return 'No such file exists: '.$this->fileLocation;
  53. }
  54. }
  55. function reportError(){
  56. return $this->error;
  57. }
  58. }
  59.  
  60. ?>
Crozin
Generujesz losową nazwę (GenerateUniqueID()) i sprawdzasz czy taki plik aby przypadkiem nie istnieje (file_exists). Jeżeli istnieje ponawiasz całą procedurę.
Przydatna będzie tu pętla do-while.
lukaszk
Tak ale nie wiem jak to zrobić dokłądnie w którym miejscu zmodyfikować bez pętli gdyż zakłądam że nie będzie takiego samego pliku.
Generic UID jest przykłądowe

Docelowo md5(czas,data,nazwa_pliku,jakis_string)

nie będzie to kilka milionów fotek więc zakładam że się nie powtórzy.
Zależy mi na zmianie nazwy pliku na zakodowaną i taką wrzucienie na serwer

Ale nie wiem jak mam zmienić tą nazwę!
potreb
Ja robię to na zasadzie dopisywania do nazwy pliku _1, _2, jest to o tyle lepsze rozwiązanie, że wtedy masz zachowaną nazwę pliku jak również opcję że nic się nie powtórzy i będzie mogło być przesłane.

  1. $name = pathinfo($filename, PATHINFO_FILENAME);
  2. $ext = pathinfo($filename, PATHINFO_EXTENSION);
  3. for($i=1; $i<40; $i++)
  4. {
  5. $file = $name . '-' . $i . '.' . $ext;
  6. if(!file_exists($target . $file)) return $target . $file;
  7. }
lukaszk
Chcę przechowywać zdjęcie w formie zakodowanej.
Po dodaniu przez uzytkownika ogloszenie musi zostać zaakceptowane przez administratora.
Co prawda jest walidacja czy aby jest to zdjęcie ale dzięki temu że zdjęcie będzie miało zakodowaną nazwę użytkownik nie wywoła jego
http://domena.pl/upload/moje_zdjecie.jpg
bo nie zna jego nazwy.
Kolejna to to że nie będzie duplikatów.

Nie wiem jak to zrobić ale nie koduje mi przerabiam kod i nic.

Proszę o pomoc (pewnie to tylko jedna linijka kodu)
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.