jesu Opublikowano 28 Czerwca 2009 Udostępnij Opublikowano 28 Czerwca 2009 Mam nastepujacy skrypt zdjecie,php <?php if (isset($_GET['id'])) { $id=$_GET['id']; header("Content-type: image/jpeg"); $zdjecie_res=mysql_query("SELECT logo FROM content WHERE id='".$id."'"); $zdjecie=mysql_fetch_assoc($zdjecie_res); echo $zdjecie["logo"]; } else { header("Location:../index.php"); } ?> Nie zroblem jeszcze base64 encode/decode bo wgrywalem pliczki (8kb kazdy) z poziomu phpmyadmina. Ale nie o to chodzi Obrazki sie ladnie wyswietlaja gdy w index.php dam echo '<td class="logo"><img src="fun/zdjecie.php?id='.$wyswietl["id"].'" alt=""></img></td>'; z tym ze linki (we właściwościach) mają postać na przyklad mojadomena/fun/zdjecie.php?id=19 Jak to zamienic na mojadomena/19.jpg tzn aby ?$id -> $id.jpg ? Pokojówki w kulturze Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PawelC Opublikowano 28 Czerwca 2009 Udostępnij Opublikowano 28 Czerwca 2009 A po co chcesz to zamienić? Żeby Ci ktoś zdjęcia kradł ze strony? A nie możesz tutaj <img src="fun/zdjecie.php?id='.$wyswietl["id"].'" alt=""></img> Zamiast fun/zdjecie.php?id= dać poprostu domena/'.$wyswietl['id'].'.'.jpg' Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
jesu Opublikowano 28 Czerwca 2009 Autor Udostępnij Opublikowano 28 Czerwca 2009 To nie dziala. Przede wszystkim nie odwoluje sie w zaden sposob do zdjecie.php, jak mam niby przekazac tu parametr? Po prostu chce zeby to szybciej dzialalo jak beda w cache, bo jeszcze jak beda wieksze to mi serwer zamuli jak za kazdym razem bede selecta robil A moze zoptymalizowac po prostu zapytania i podmieniac widoczny URL javascriptem ? Pokojówki w kulturze Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PawelC Opublikowano 28 Czerwca 2009 Udostępnij Opublikowano 28 Czerwca 2009 A moze zoptymalizowac po prostu zapytania i podmieniac widoczny URL javascriptem ? Optymalizacja zapytań to podstawa Możesz podmienić i wtedy zobaczysz jakie będą tego efekty. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
jesu Opublikowano 28 Czerwca 2009 Autor Udostępnij Opublikowano 28 Czerwca 2009 Ale jak podmienie to to bedzie "zaslona dymna" a ja chce aby user mogl sobie zapisac ten plik jakby to byl zwyczajny jpg Pokojówki w kulturze Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pavel Opublikowano 28 Czerwca 2009 Udostępnij Opublikowano 28 Czerwca 2009 W pliku .htaccess dajesz: RewriteEngine On RewriteRule ^([0-9]+)\.jpg$ /fun/zdjecie.php?id=$1 [L] Wtedy wszystkie wywołania pliku XX.jpg spowodują wyświetlenie dokumentu fun/zdjecie.php?id=XX Powinieneś też wysłać do przeglądarki odpowiednie nagłówki które poinformują że chcesz cachować ten plik. W ogóle nie bardzo rozumiem po co ta zabawa z trzymaniem obrazków w bazie Nie lepiej zapisać normalnie? Darmowy dysk sieciowy 2-5GB Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
kilas88 Opublikowano 29 Czerwca 2009 Udostępnij Opublikowano 29 Czerwca 2009 1. Przetrzymywanie rysunków w bazie jest bardzo nieoptymalnym rozwiązaniem. 2. W swoim skrypcie masz generowane obrazki tylko w przypadku, gdy masz nawiązane połączenie z bazą danych. Nikt nie będzie nikomu mógł wysłać bezpośredniego adresu do obrazka, więc sytuacja jest inna, niż gdybyś miał "normalny" plik graficzny. Mógłbyś to inaczej rozwiązać. Tworzysz nowy plik, image.php. W pliku tym ustawiasz odpowiednie nagłówki, nawiązujesz połączenie z bazą i tabelą, w której przechowujesz obrazki. Potem ktoś się odwołując do tego skryptu, generuje obrazek. No i łatwo też byłoby podstawić do tego uniwersalne mod_rewrite, przez co adres byłby zawsze taki sam - zawsze aktualny. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Mion Opublikowano 29 Czerwca 2009 Udostępnij Opublikowano 29 Czerwca 2009 Przechowywanie grafiki w bazie danych to zdecydowanie zły pomysł: - takie bazy nie przeniesiesz za pomocą phpmysqladmina; - przy dużej liczbie grafik baza też będzie duża co za tym idzie mogą pojawiać się problemy z wydajnością zapytań; Na szczęście przerobienie tego na klasyczne grafiki w plikach jest stosunkowo proste. HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Maximus Marius Opublikowano 29 Czerwca 2009 Udostępnij Opublikowano 29 Czerwca 2009 Zawsze można uzyć jakiegoś lepszego klienta mysql, ja tam polecam wszystko ze stajni EMS (np. ems sql manager) i też nie trzeba mieć zdalnego dostepu do bazy danych wystarczy localhost. Ale fakt faktem że trzymanie obrazków w bazie to najczestszy pomysł "młodych" programistów który i mnie jakieś 10 lat temu nie ominął Wiec nie bede krytykował aż tak tego pomysłu jak chce to niech ma , jak powalczy troche z problemami to sie nawróci na lepsze metody. Co do samego problemu to MOżna zrobić tak: RewriteEngine On RewriteRule ^obrazki\.jpg$ /fun/zdjecie.php [L] A potem w kodzie PHP wydłubać numer to już w sumie jak kto woli. Jezeli chcesz mieć cache zawsze możesz zapisywać obrazki na dysku i je wyświetlać Czyli w .htaccess sprawdzasz czy podany plik istnieje jak nie istnieje to wywołaj PHP , w ez publish nazywa sie to static cache Zamiast pozycjonowania gram na gitarze i polecam kurs gitarowy Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pawloski Opublikowano 29 Czerwca 2009 Udostępnij Opublikowano 29 Czerwca 2009 header('Cache-Control: max-age=86400'); gdzie 86400 to czas cache w sekundach Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Mion Opublikowano 29 Czerwca 2009 Udostępnij Opublikowano 29 Czerwca 2009 IMHO takie cachowanie mija się z celem, bo cache następuje u usera, a nie na serwerze więc każdy nowy user "pobierze" obrazek z bazy. W serwisach o zwiększonym obciążeniu grafiki powinny być jako pliki zapisane do tego serwowane nie przez apache, ale wydajniejsze serwery HTTP jak lighthttp, nginx. HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Trotyl Opublikowano 29 Czerwca 2009 Udostępnij Opublikowano 29 Czerwca 2009 <?php ob_start(); function & db_img($id)//pobieranie obrazkow { $zdjecie_res = mysql_query("SELECT logo FROM content WHERE id='" . $id . "'"); $zdjecie = mysql_fetch_assoc($zdjecie_res); //dodac obsluge bledow mysql return $zdjecie["logo"]; } function show_img(&$img)//wyswietlanie obrazkow { header("Content-type: image/jpeg"); header('Cache-Control: max-age=86400'); echo $img; } if (isset($_GET['id']) && is_numeric($_GET['id'])) { // numeryczne id - znajdz i wyswietl if (file_exists('img/' . $_GET['id'] . '.jpg') && time() - filemtime('img/' . $_GET['id'] . '.jpg') < 14400) { // czas cache'owania w sekundach //jezeli jest w cache i nie wymaga uaktualnienia - wyswietl show_img(file_get_contents('img/' . $_GET['id'] . '.jpg', FILE_BINARY)); } else { // jezeli stary lub brak w cache uaktualnij/zapisz i wyswietl $img = db_img($_GET['id']); $file = fopen('img/' . $_GET['id'] . '.jpg', "wb"); flock($file, 2); fwrite($file, $img); flock($file, 3); fclose($file); show_img($img); } } else { header("HTTP/1.0 404 Not Found"); exit("bye bye"); } ?> + w/w zmiany w .ht i <img /> nihil fit sine causa Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
jesu Opublikowano 29 Czerwca 2009 Autor Udostępnij Opublikowano 29 Czerwca 2009 Sprawdze to i potestuje w wolnej chwili jak sie uporam z innym projektem. Wyglada rozsadnie. Thanks in advance. Pokojówki w kulturze Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
mrbox Opublikowano 29 Czerwca 2009 Udostępnij Opublikowano 29 Czerwca 2009 Mam nastepujacy skrypt zdjecie,php<?phpif (isset($_GET['id'])){ [b]$id=$_GET['id'];[/b] header("Content-type: image/jpeg"); $zdjecie_res=mysql_query("SELECT logo FROM content [b]WHERE id='".$id."'"[/b]);[ciach]Jeśli jest dokładnie tak jak napisałeś, to tu wydaje mi się, że masz podatność na SQL Injection - to tak 'obok' problemu tematu Tanie SEO Templatki Najlepsze serwery Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
slawek22 Opublikowano 30 Czerwca 2009 Udostępnij Opublikowano 30 Czerwca 2009 Przerób to na pliki, przechowywanie grafiki w bazie jest tak nieoptymalne, że nawet szkoda gadać - chociaż te 2 rodzaje cache to nie taki głupi pomysł to skomplikowany do zrealizowania (jeśli używasz max-age to nieaktualne pliki użytkownik zobaczy nawet po zmianie). Jeśli dobrze nad tym kilka dni nie pomyślisz i nie przetestujesz pod kilkoma przeglądarkami to nie będzie dobrze działać. IMHO takie cachowanie mija się z celem, bo cache następuje u usera, a nie na serwerze więc każdy nowy user "pobierze" obrazek z bazy.Przynajmniej każdy user nie będzie tego obrazka pobierał od nowa przy każdym odświerzeniu witryny.Jeśli w pliku .php nie wstawisz nagłówków mówiących o cache to właśnie to się stanie, więc wtedy to już w ogóle będzie nieopisana masakra. do tego serwowane nie przez apache, ale wydajniejsze serwery HTTP jak lighthttp, nginxNo włąśnie i tutaj kolejny problem bo ngnixem takiego obrazka z bazy nie zaserwujesz bez wykorzystania wolnego CGI. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
Zarchiwizowany
Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.