o2w5n778
2.08.2010, 17:46:25
Witam!
Czy mógł by ktoś ustawić kodowanie MD5 w skrypcie uploadu zdjęć?
<?
$site ="http://adres.pl/"; // adres strony na końcu pamiętaj o /
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Dokument bez tytułu</title>
</head>
<body>
<?php
if ($_POST['dodaj']) {
$plik_nazwa = trim($_POST['plik_nazwa']); $plik_tmp = $_FILES['foto']['tmp_name'];
$plik_nazwa = $_FILES['foto']['name'];
echo "Plik: <strong>$plik_nazwa</strong> został przesłany na serwer!<br>"; print 'link dla forum: <input type="text" value="'.$site.''.$plik_nazwa.'" size="40" /><br>'; print 'link dla przeglądarki: <input type="text" value="'.$site.''.$plik_nazwa.'" size="40" /><br>'; print 'kod dla html: <input type="text" value="<img src="'.$site.''.$plik_nazwa.'" alt="Ładuje" />" size="40" /><br>'; /* Komenda Sprawdzająca Działanie Uploadu Zdjęcia */
}
}
?>
<div id="okno">
<form enctype="multipart/form-data" action="index.php" method="POST" name="newad">
<div class="oknoDane">
<p class="oknoDanePotrzebne">Podaj Potrzebne Dane:</p>
<table><tr>
<td><table><tr>
<td>fotografia:</td><td><input type="file" name="foto" class="nazwy" /></td></tr></table></td>
</tr></table>
</div>
<div class="pagesPrzyciski">
<input type="submit" name="dodaj" class="pages" value="Dodaj" />
<input type="reset" class="pages" value="Resetuj" />
<input type="button" class="pages" onclick="java script:history.back();" name="wstecz" value="Wstecz" />
</div>
</form>
</div>
</body>
</html>
Fifi209
2.08.2010, 18:22:19
Cytat(o2w5n778 @ 2.08.2010, 17:46:25 )

Witam!
Czy mógł by ktoś ustawić kodowanie MD5 w skrypcie uploadu zdjęć?
<?
$site ="http://adres.pl/"; // adres strony na końcu pamiętaj o /
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Dokument bez tytułu</title>
</head>
<body>
<?php
if ($_POST['dodaj']) {
$plik_nazwa = trim($_POST['plik_nazwa']); $plik_tmp = $_FILES['foto']['tmp_name'];
$plik_nazwa = $_FILES['foto']['name'];
$kodowanie = md5($_POST['plik_nazwa']);
echo "Plik: <strong>$plik_nazwa</strong> został przesłany na serwer!<br>"; print 'link dla forum: <input type="text" value="'.$site.''.$plik_nazwa.'" size="40" /><br>'; print 'link dla przeglądarki: <input type="text" value="'.$site.''.$plik_nazwa.'" size="40" /><br>'; print 'kod dla html: <input type="text" value="<img src="'.$site.''.$plik_nazwa.'" alt="Ładuje" />" size="40" /><br>'; /* Komenda Sprawdzająca Działanie Uploadu Zdjęcia */
}
}
?>
<div id="okno">
<form enctype="multipart/form-data" action="index.php" method="POST" name="newad">
<div class="oknoDane">
<p class="oknoDanePotrzebne">Podaj Potrzebne Dane:</p>
<table><tr>
<td><table><tr>
<td>fotografia:</td><td><input type="file" name="foto" class="nazwy" /></td></tr></table></td>
</tr></table>
</div>
<div class="pagesPrzyciski">
<input type="submit" name="dodaj" class="pages" value="Dodaj" />
<input type="reset" class="pages" value="Resetuj" />
<input type="button" class="pages" onclick="java script:history.back();" name="wstecz" value="Wstecz" />
</div>
</form>
</div>
</body>
</html>
Wstawione!

A tak serio to dział pomoc, po pierwsze
Jak poprawnie zadać pytanie
o2w5n778
2.08.2010, 18:42:11
Jest kodowanie MD5 to czemu nadal po wrzuceniu obrazka na serwer z polskimi znakami zmienia się jego nazwa?
Może to coś innego zrobić trzeba? :/
Crozin
2.08.2010, 18:48:24
@fifi209: Takie bezsensownie długie cytowanie, szczególnie całych wiadomości, gdy Twoja odpowiedź jest jedyną w wątku jest niezwykle irytujące... - z łaski swej popraw to, bym mógł usunąć tego posta
Aha... i MD5 to nie jest algorytm kodowania. Dostałeś linka z instrukcją jak zadawać pytania - jest tam na pewno punkt mówiący o tym, że adresat pytania musi w ogóle zrozumieć co masz na myśli.
krispak
2.08.2010, 18:49:20
o2w5n778
2.08.2010, 19:09:15
No teraz znacznie lepiej tylko jak przez upload wgram plik o nazwie "śżźćłó.jpg" zmienia się na "d41d8cd98f00b204e9800998ecf8427e"
I mogę powiedzieć że jest prawie dobrze, tylko wygenerowana nazwa nie ma rozszerzenia więc przeglądarka nie może tego otwożyć
krispak
2.08.2010, 19:25:21
Dodaj jeszcze przed $kodowanie
a po $kodowaniu
$lacz = $kodowanie.$ext;
i zastap to
tym
Hehe
Pozdrawiam
Crozin
2.08.2010, 19:32:20
Cytat
Jej
$ext = pathinfo($plik_nazwa, PATHINFO_EXTENSION
);
o2w5n778
2.08.2010, 20:30:55
Już wszystko z rozszerzeniami OK tylko po uploadowaniu pliku wyświetla się zła nazwa, a powinna się wyświetlać ta nowa wygenerowana
Juz ok
Fifi209
2.08.2010, 20:54:38
Cytat(Crozin @ 2.08.2010, 18:48:24 )

@fifi209: Takie bezsensownie długie cytowanie, szczególnie całych wiadomości, gdy Twoja odpowiedź jest jedyną w wątku jest niezwykle irytujące... - z łaski swej popraw to, bym mógł usunąć tego posta
To jak mu niby miałem wstawić do kodu?? ;]
Crozin
2.08.2010, 21:11:10
Cytat
o jak mu niby miałem wstawić do kodu?? ;]
Kurde... wziąć i tą jedną linijkę podmienić?
Fifi209
2.08.2010, 22:23:02
Cytat(Crozin @ 2.08.2010, 21:11:10 )

Kurde... wziąć i tą jedną linijkę podmienić?
To też mu dodałem, chciał gotowca.
Skoro nie widzisz, żartu w moim poście to nie mamy o czym rozmawiać ;]
IceManSpy
2.08.2010, 22:39:43
A ktoś pomyślał, co będzie jak wrzucimy 2 zdjęcia o tej samej nazwie? Przecież MD5 zwróci ten sam wynik i nadpisze stary albo jakiś błąd wyrzuci (ale raczej nadpisze). Więc albo robić MD5 z nazwy pliku + jakieś rand, albo w ogóle napisać sobie funkcję, która generuje ileś tam znaków (liczb), sprawdzić czy takie coś istnieje, jak tak, to jeszcze raz losujemy, jak nie, to ten twór zapisujemy jako nazwę pliku + rozszerzenie.
krispak
2.08.2010, 22:48:27
i nic sie nie powtorzy
Pozdrawiam
A ja mam jedno nieśmiałe pytanie... Po kiego wała stosować md5 do nazwy obrazka? Że niby nazwa "losowa"?
Crozin
2.08.2010, 23:20:53
Bardzo szybki sposób pozbycia się z nazwy plików śmieci w postaci jakiś znaków specjalnych.
everth
2.08.2010, 23:23:31
Są rzeczy na niebie i ziemi o których nie śniło się naszym filozofom. Można się tu nauczyć np. paru ciekawych rozwiązań - liczenia sumy po nazwie i mt_rand lub nazwie i microtime. Dziwne że nikt jeszcze nie wpadł na tak egzotyczne rozwiązanie jak liczenie sumy po zawartości...
@EDIT: @Crozin a w czym to lepsze od preg_replace("/[^a-zA-Z0-9]*/",'',$string) ?
Crozin
2.08.2010, 23:36:06
Cytat
Dziwne że nikt jeszcze nie wpadł na tak egzotyczne rozwiązanie jak liczenie sumy po zawartości...
Pewnie dlatego, że przy większych plikach byłoby to zbyt kosztowe?
Cytat
@EDIT: @Crozin a w czym to lepsze od preg_replace("/[^a-zA-Z0-9]*/",'',$string) ?
Pewnie tym, że jest prostsze, bardziej czytelne oraz daje mniejsze prawdopodobieństwo wystąpienia konfliktu nazw.
Fifi209
2.08.2010, 23:47:08
Cytat(Crozin @ 2.08.2010, 23:36:06 )

Pewnie tym, że jest prostsze, bardziej czytelne oraz daje mniejsze prawdopodobieństwo wystąpienia konfliktu nazw.
A mi się wydawało, że prawdopodobieństwo konfliktu jest zawsze takie samo...
Jeżeli chciałbyś je zmniejszyć to np.
Wtedy szansa na dwa pliki o identycznej nazwie jest znacznie mniejsza.
everth
3.08.2010, 00:03:57
@Crozin: ja nie mówiłem o sumie z (uniqid()+$filename) ale niech ci będzie

. Bardziej ciekawi mnie granica rozmiaru powyżej której sumy nie opłaca się liczyć, z mojego doświadczenia to jakieś ~30-40MB, poniżej czas liczenia mieści się w 1-2s, biorąc przy tym pod uwagę że o ile ktoś nie wrzuca filmów (bo mu dostawca w php.ini i tak nakłada limit) to liczenie po zawartości ma też jedną zaletę - unikamy dubli na dysku (co ma znaczenie jeśli ma ograniczony przydział dysku);
PS: A właściwie to po co liczyć sumę po uniqid() i nazwie, skoro uniqid jest losowy.
Crozin
3.08.2010, 00:11:56
Cytat
A mi się wydawało, że prawdopodobieństwo konfliktu jest zawsze takie samo...
No to Ci się źle wydawało.
@everth: 1-2 sekundy na liczenie samej sumy? 40 mb pamięci na to marnować? By wygenerować względnie unikalny identyfikator? Przecież kilkunastu-kilkudziesięciu użytkowników przy czymś takim jest wstanie zablokować serwer
Cytat
PS: A właściwie to po co liczyć sumę po uniqid() i nazwie, skoro uniqid jest losowy.
uniqid nie jest losowy. Opiera się na czasie.
Z tymi dublami na dysku to raczej bym się wstrzymał. Pamiętaj, że mimo iż jest to naprawdę mało prawdopodobne dwa różne pliki mogą dać ten sam hash. Poza tym - ilość takich zdublowanych plików jest raczej niewielka.
everth
3.08.2010, 00:29:32
@Crozin - to jest właśnie dylemat. Myślałem że znasz jakiś lepszy sposób na detekcję dubli. Przy dużym ruchu nie opłaca się liczyć sum, ale wzrasta ryzyko sytuacji (mówię o portalu społecznościowym) że ktoś puści słitaśną fotkę i każdy będzie chciał ją mieć. Część z tych osób dostanie ją np emailem i będą robić uploady (często pod innymi nazwami). Bez sum nie widzę żadnego rozwiązania.
Poza tym dalej nie widzę w czym takie md5(uniqid.$filename) jest lepsze od $name = uniqid().$file['tmp_name']. W drugim przypadku oba elementy są losowe. W pierwszym rozumiem że md5 zabezpiecza cię tylko przed znakami specjalnymi (bo chyba nie przed kolizją?). Choć coś mi mówi że można to samo osiągnąć za pomocą prostszych funkcji (szybszych?).
Crozin
3.08.2010, 01:05:16
Co do dubli: IMO nie warto się nimi zajmować, szczególnie przy obecnych cenach dysków.
Takie przelecenie nazwy pliku jakąkolwiek funkcją hashującą daje Ci kilka rzeczy:
1) Kod jest bardzo prosty - bez zbędnego kombinowania (wygenerowania hasha dla kilkudziesięcioznakowego to "zerowy" czas)
2) Szybkie zunifikowanie nazw - porządek
3) Stała długość ciągu - przydatne jeżeli nazwy plików chcemy gdzieś magazynować (np. w bazie danych)
Co do kolizji nazw. Sam hash daje już niezwykle małe prawdopodobieństwo wystąpienia takiej kolizji, ale... przezorny zawsze ubezpieczony:
do {
everth
3.08.2010, 01:42:04
Hmm, co do ostatniego się nie zgodzę. Pokaż mi różnicę:
i załóżmy hipotetyczną sytuację że uniqid() dał tą samą wartość (sam mówisz że to oparte o czasie, może się zdarzyć) a $name też to samo. md5 nic ci nie daje (liczone po tym samym ciągu) - daje ci jedynie pierwsze 3 zalety.
Jest mówisz o przechowywaniu w bazie to równie dobrze można jednak nadawać porządkowe ID jako prefiks nazwy i klucz md5 liczony po zawartości (dodatkowo z atrybutem unique) - wtedy plik powodujący kolizję po prostu nie będzie mógł być dodany. Co do szybkości tworzenia kluczy - przecież i tak nie musimy liczyć dla całości tylko dla pierwszych n-bajtów, obniża to bezpieczeństwo naszej sumy ale zabezpiecza przed dużymi plikami. Trochę się offtop zrobił.
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.