Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]upload obrazków
inny02
post
Post #1





Grupa: Zarejestrowani
Postów: 48
Pomógł: 0
Dołączył: 24.08.2009

Ostrzeżenie: (10%)
X----


witam

ostatnio kupiłem skrypt hostingu obrazków i chciałbym zmienić w nim linki i jest taki problem jak zrobić, żeby
jak wrzucimy dwa takie same pliki(chodzi o nazwę) to żeby ten drugi miał dodane przez skrypt do tej nazwy dodatkową litera/cyfra.

przykład wrzucamy plik.jpg a następnie znów plik.jpg a skrypt w tym drugim pliku zmienia nazwę przed wysłaniem na serwer na plik2.jpg
i nie mogą się nigdy zdublować te nazwy, bo wiadomo plik na serwerze się nadpiszę i pod danym adresem będzie się wyświetlał inny obrazek.

Tutaj zamieszczam plik który odpowiada za wrzucanie plików na serwer i zmianę nazwy. Aktualnie robi długi ciąg liter i cyfr.

http://odsiebie.com/pokaz/5032099---4787.html

Linie 173/179 odpowiadają za zamianę wgrywanych plików

Dzięki za pomoc
Go to the top of the page
+Quote Post
Suh
post
Post #2





Grupa: Zarejestrowani
Postów: 112
Pomógł: 27
Dołączył: 24.08.2007
Skąd: Tarnów

Ostrzeżenie: (0%)
-----


Możesz sobie dopisać do tego powiedzmy jakąś tablicę, w której będziesz zapisywał nazwy wysłanych w danym żądaniu plików. Po czym nazwę każdego wysyłanego pliku będziesz sprawdzał pod kątem istnienia jej w tablicy. Jeżeli istnieje to w miejscu gdzie masz losowo tworzona nazwę dodajesz powiedzmy jakiś znaczek - dzięki czemu nazwa będzie już zupełnie inna.
Go to the top of the page
+Quote Post
inny02
post
Post #3





Grupa: Zarejestrowani
Postów: 48
Pomógł: 0
Dołączył: 24.08.2009

Ostrzeżenie: (10%)
X----


Dzięki.

słuchaj z PHP zaczynam przygodę od niedawną to raczej sobie nie poradzę, jeśli ktoś dopiszę mi to co wyżej pisał Suh to mogę zapłacić
Czyli tak wgrywam plik o takiej samej nazwie wykrywa mi, że już jest taki plik istnieje i porostu na końcu dodaje jakieś znaczek
Go to the top of the page
+Quote Post
FireMan
post
Post #4





Grupa: Zarejestrowani
Postów: 59
Pomógł: 0
Dołączył: 4.10.2008
Skąd: Małopolska

Ostrzeżenie: (0%)
-----


Proste. Też to robiłem aby to zrobić możesz dać ze przed nazwa plik.jpg dodaje sie jakies cyfry np. 02432. Najlepiej wziąć miesiąc, rok, dzień, sekundę.

  1. $data_uploadu = date("myds");


i teraz przed nazwą pliku dajesz $data_upload

Np.

  1. $uploadPath = "pictures/"$data_upload.$rndName;
Go to the top of the page
+Quote Post
Suh
post
Post #5





Grupa: Zarejestrowani
Postów: 112
Pomógł: 27
Dołączył: 24.08.2007
Skąd: Tarnów

Ostrzeżenie: (0%)
-----


@inny02 posłuchaj jest prostsza metoda. To co rano pisałem - faktycznie zdało by egzamin ale po co komplikować.
Nazwy po uploadzie w tym skrypcie są hashowane za pomocą md5(). Wystarczy, że zmienisz w linijce 175 :
  1. md5($n . date("d-m-y") . time())

na
  1. md5($n . date("d-m-y") . microtime())


Dzięki czemu niezależnie czy wgrasz 2 czy 20 plików o tej samej nazwie - każdy będzie miał po uploadzie inną nazwę.

Ten post edytował Suh 25.08.2009, 10:16:24
Go to the top of the page
+Quote Post
inny02
post
Post #6





Grupa: Zarejestrowani
Postów: 48
Pomógł: 0
Dołączył: 24.08.2009

Ostrzeżenie: (10%)
X----


z haszowania md5 nie chcę korzystać ponieważ daje to za długi adres później.
Chcę tylko, żeby dodawało na końcu nazwy pliku, np cyfrę 1, 2, 3, itd(taka cyfra ile razy będzie wgrywany plik z tą samą nazwą). Ale tylko, jeśli wgrywany plik będzie miał taką samą nazwę, instniejącego już pliku na serwerze. A jak wgrywam plik z nazwą, której jeszcze nie ma na serwerze to nie potrzebne dodawanie nic do nazwy, wyłącznie jak nazwą będzie tak sama jak już wcześniej wgrana (IMG:style_emoticons/default/snitch.gif)

Ten post edytował inny02 25.08.2009, 11:59:33
Go to the top of the page
+Quote Post
piotrekkr
post
Post #7





Grupa: Zarejestrowani
Postów: 386
Pomógł: 25
Dołączył: 28.09.2005

Ostrzeżenie: (0%)
-----


  1. $filename = 'plik.jpg';
  2. $dir = '/katalod/ze/zdjeciami/';
  3. $path = $dir . $filename;
  4. $segments = pathinfo($path);
  5. while(file_exists($path)){
  6. $path = $dir . $segments['filename'] . '_' . $i . '.' . $segments['extension'];
  7. }
  8.  
  9. //zapis pod $path...


Ten post edytował piotrekkr 25.08.2009, 12:07:26
Go to the top of the page
+Quote Post
inny02
post
Post #8





Grupa: Zarejestrowani
Postów: 48
Pomógł: 0
Dołączył: 24.08.2009

Ostrzeżenie: (10%)
X----


a jak dodać ten kod do pliku, aby działało. Coś mi to nie działa (IMG:style_emoticons/default/dry.gif)

  1. if ($_FILES[$name]["error"] > 0) {
  2. die("Error: " . $_FILES[$name]["error"]);
  3. }
  4. else {
  5. $n = $_FILES[$name]["name"];
  6. $rndName = md5($n . date("d-m-y") . time()) . "." . findExtension($n);
  7. $uploadPath = "pictures/" . $rndName;
  8. $tempPath = $_FILES[$name]["tmp_name"];
  9. move_uploaded_file($tempPath, $uploadPath);
  10. }
  11.  
  12. }
  13. else
  14. die("Sorry ! \"{$_FILES[$name]["name"]}\" is an invalid image.");
Go to the top of the page
+Quote Post
piotrekkr
post
Post #9





Grupa: Zarejestrowani
Postów: 386
Pomógł: 25
Dołączył: 28.09.2005

Ostrzeżenie: (0%)
-----


za
  1. $uploadPath = "pictures/" . $rndName; daj:

daj
  1. $segments = pathinfo($uploadPath);
  2. while(file_exists($uploadPath)){
  3. $uploadPath = $dir . $segments['filename'] . '_' . $i . '.' . $segments['extension'];
  4. }

reszta bez zmian...

Ten post edytował piotrekkr 25.08.2009, 13:34:44
Go to the top of the page
+Quote Post
inny02
post
Post #10





Grupa: Zarejestrowani
Postów: 48
Pomógł: 0
Dołączył: 24.08.2009

Ostrzeżenie: (10%)
X----


no ok dodałem,

  1. else {
  2. $n = $_FILES[$name]["name"];
  3. $rndName = md5($n . date("d-m-y") . time()) . "." . findExtension($n);
  4. $uploadPath = "pictures/" . $rndName;
  5. $segments = pathinfo($uploadPath);
  6. while(file_exists($uploadPath)){
  7. $uploadPath = $dir . $segments['filename'] . '_' . $i . '.' . $segments['extension'];
  8. }
  9. $tempPath = $_FILES[$name]["tmp_name"];
  10. move_uploaded_file($tempPath, $uploadPath);
  11. }
  12.  


ale jak pozostawię $uploadPath = "pictures/" . $rndName; bez zmian to dalej będzie używać md5
funkcja move_uploaded_file wywala
failed to open stream: No such file or directory in /home/pic/www/process.php on line 182 // to jest move_uploaded_file($tempPath, $uploadPath);
Go to the top of the page
+Quote Post
piotrekkr
post
Post #11





Grupa: Zarejestrowani
Postów: 386
Pomógł: 25
Dołączył: 28.09.2005

Ostrzeżenie: (0%)
-----


To sobie zmien $rndName = $_FILES[$name]["name"]; czy na co tam chcesz...
Go to the top of the page
+Quote Post
inny02
post
Post #12





Grupa: Zarejestrowani
Postów: 48
Pomógł: 0
Dołączył: 24.08.2009

Ostrzeżenie: (10%)
X----


działa (IMG:style_emoticons/default/tongue.gif)
ale są małe problemy mianowicie
1 obrazek plik.jpg wrzuci wszytko ładnie do folderu pictures z nazwą plik.jpg
2 obrazek plik.jpg wrzuci już do głównego katalogu strony z nazwą plik_1.jpg
3 obrazek plik.jpg nie wrzuci w ogóle tylko wyskoczy komunikat po kliku sekundach Fatal error: Maximum execution time of 30 seconds exceeded in /home/pic/www/process.php on line 179

179 linia $uploadPath = $dir . $segments['filename'] . '_' . $i . '.' . $segments['extension'];

Ten post edytował inny02 25.08.2009, 16:41:16
Go to the top of the page
+Quote Post
Fafu
post
Post #13





Grupa: Zarejestrowani
Postów: 243
Pomógł: 33
Dołączył: 30.01.2008
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


chyba powinno byc tak:
  1. 1.
  2. $segments = pathinfo($uploadPath);
  3. $i=0;
  4. while(file_exists($uploadPath)){
  5. $i++;
  6. $uploadPath = $dir . $segments['filename'] . '_' . $i . '.' . $segments['extension'];
  7. }
Go to the top of the page
+Quote Post
inny02
post
Post #14





Grupa: Zarejestrowani
Postów: 48
Pomógł: 0
Dołączył: 24.08.2009

Ostrzeżenie: (10%)
X----


Cytat(Fafu @ 25.08.2009, 17:54:59 ) *
chyba powinno byc tak:
  1. 1.
  2. $segments = pathinfo($uploadPath);
  3. $i=0;
  4. while(file_exists($uploadPath)){
  5. $i++;
  6. $uploadPath = $dir . $segments['filename'] . '_' . $i . '.' . $segments['extension'];
  7. }



-obrazek z nazwą, jak jeszcze nie była wgrywana na serwer wywali błąd, ale wrzuci go do poprawnego katalogu:


Warning: getimagesize(/tmp/phpMJAPZ6) [function.getimagesize]: failed to open stream: No such file or directory in /home/picl/www/process.php on line 91

Warning: getimagesize(/tmp/phpMJAPZ6) [function.getimagesize]: failed to open stream: No such file or directory in /home/pic/www/process.php on line 91

Warning: getimagesize(/tmp/phpMJAPZ6) [function.getimagesize]: failed to open stream: No such file or directory in /home/pic/www/process.php on line 91
Sorry ! "asd.jpg" is an invalid image.

linia 91:
  1. if ( ( list($width, $height, $temptype, $attr) = getimagesize( $path ) ) !== false ) {
  2. $x = $temptype;



-Obrazek z instniejącom nazwą na serwerze wgra się poprawnie i oczywiście nazwa się zmieni, ale jest wgrany do głównego katalogu strony zamiast do katalogu picutres

-Jeśli wrzucam dwa lub więcej obrazków wgra się tylko pierwszy obrazek na serwer
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 28.09.2025 - 16:08