Kép tárolása mysql-ben, majd megjelenítés
Sziasztok!
Képet kell mysql db-ban tárolnom. Arra lennék kíváncsi, hogy hogyan rakom a képet az adatbázisba, illetve hogyan tudom onnan kiolvasni és megjeleníteni.
Mindenkinek előre is köszönöm a segítséget!!! S.O.S. kellene a segítség!
■ Képet kell mysql db-ban tárolnom. Arra lennék kíváncsi, hogy hogyan rakom a képet az adatbázisba, illetve hogyan tudom onnan kiolvasni és megjeleníteni.
Mindenkinek előre is köszönöm a segítséget!!! S.O.S. kellene a segítség!
Re: Kép tárolása mysql-ben, majd megjelenítés
De jobb megoldás ha feltöltöd a képet és csak a kép nevét tárolod adatbázisban. ha így akarod válaszolj és segítek.
Re: Kép tárolása mysql-ben, majd megjelenítés
Köszi: Balu
Re: Kép tárolása mysql-ben, majd megjelenítés
{
print "<p>Kép feltöltése:";
print "<form enctype=\"multipart/form-data\""
. " method=\"post\">"
. "<input type=\"hidden\" name=\"max_file_size\""
. " value=\"200000\">"
. "<input type=\"file\" name=\"uploadfile\" size=\"60\">"
. "<br><input type=\"submit\" value=\"Feltölt\"></form>";
}
if(isset($uploadfile) and is_uploaded_file($uploadfile))
{
if(move_uploaded_file($uploadfile,
$path . "ide jön a könyvtár ahová át akarod helyzni a képet" . $uploadfile_name))
{
print("<p>Kép sikeresen feltöltve. A kép neve: <b>$uploadfile_name</b>" );
}
else
{
print("<p>A képfeltöltés nem sikerült." );
}
}
A program a szerver egy tmp könyvtárába menti a képet, majd áthelyezi a saját könyvtáradba, amit megadsz. A kép nevét beszúrhatod az adatbázisba. Ha valami nem világos írd meg.
Megjelenítés gond...
Segítséget szeretnék kérni az alábbi kódrészlet befejezéséhez. Képet tárolok az adatbázisban,csak nem bírom megjeleníteni.(A kép címét tárolom)
Ha valakinek volna ötlete, kérem írja meg.
Köszönök minjden segítséget.
Sziasztok:Attila
<html>
<body>
<form action="<?print $php_self?>" method="post">
<INPUT type="file" name="faj" ><br>
<input type="submit" value="feltöltés!" >
</form>
<?php
$fajl='a.jpg';
$kepfajl=fopen($fajl, "rb")or die("Fájl nem elérhető!");
$kep_adat=fread($kepfajl,filesize($fajl));
$kep_adat=addslashes($kep_adat);
$sql="INSERT INTO kepek (cim,kep) VALUES ('Kep cime','$kep_adat')";
include ("connect_kep.php");
$eredm=mysql_query($sql)or die("Nem sikerült a lekérdezés,MySql hibaüzenet: " . mysql_error());
$sql="SELECT * from kepek where id=1";
$result=@mysql_query($sql)or exit("Nem sikerült!");
$kep=@mysql_query($result,0,'kep');
header("Content-Type: image/jpeg");
header("Content-Length: " . filesize($file));
header('Content-Disposition: inline; filename="a.jpg"');
header("Content-Description: ez egy valami");
print $kep;
?>
avatar feltöltése
Hogyan lehet ilyet csinálni?
Előre is THX!
könnyen
De ha profi rendszert akarsz, a feltöltött képet magad méretezed át 80x80-asra, ha valamelyik mérete nagyobb, például ImageMagick segítségével.
Gyulus
nem műxik...
Próbáltam a scriptet, le is fut, minden oké, kivéve egy dolgot.
A fájl nem töltődik fel sehova, hibajelzést sem kapok.
Ha pl. a gyökér "Kepek" könyvtárba szerném feltölteni a fájlokat, pontosan mit kellene beírnom a macsakakörmök közé?
$path."azazhogy ide".$uploadfile_name))
Próbáltam már és \, / jelekkel is, de mivel nem jön hibajelzés, tanácstalan vagyok :(
Köszi:
Franky
NAGYON ELAVULT!
Adatbázisban tárolt képek
Most próbálkoztam először adatbázisban tárolni őket. Nem is volt túl nehéz betenni az adatokat. :)
A képek megjelenítése viszont kicsit körülményesnek tűnik számomra. Sőt nem is igazán sikerül.
Az eset a következő: van egy php szkript, ami leküldi a böngészőnek a képeket. Megkapja a szükséges adatokat, kiolvassa az adatbázisból a képet, leküldi és az meg is jelenik. :)
De ha több képet akarok a szkripttel megjeleníteni, akkor csak az első jelenik meg, a több nem:
pl. ilyen HTML kódot generálok, a böngésző ebből hívja meg a képküldő szkriptet:
...
<img src='img.php?img=1'>
<img src='img.php?img=2'>
<img src='img.php?img=3'>
...
A fejlesztő környezetben lokálisan ugyanaz a szkript megjeleníti az összes képet, az éles helyen viszont csak az elsőt.
Az a gyanúm, hogy amíg az img.php be nem fejezi a dolgát, addig a következő "kép" meghívása sikertelen, mert az img.php fájl foglalt a szerveren.
A lokális szerveremen elég hamar felszabadul, de az "éles" szerver hosszabban küzd a feladattal, amíg a neten le tudja küldeni az adatokat. Az is lehet, hogy az a szerver rövidebb ideig próbálkozik a szkript fájl megnyitásával.
1. Tud valaki jobb módszert?
2. Hogyan lehet a PHP képkezelő függvényei számára átvenni a képet az adatbázisból? Sajnos erre eddig nem találtam megoldást. :(
Előre is köszi a segítséget!
Albi
egy nagyon fontos dolog a
<form name="feltolt"
a többfajta fájltípus feltöltéséhez pedig az első rész kell átirni
Képtárolás adatbázisban
Pl: RAW, LONG RAW vagy BLOB formátumok (Oracle)
:)
Képfeltöltés
Konkrét kérdésem lenne képfeltöltéssel kapcsolatban. A helyzet a következő. Használok egy képgalériát, amely a felhasználó kép könyvtárából autómatikusan készít egy kép galériát. Bármit a felhasználó feltölt abba a könyvtárba, a script megjeleníti. Továbbá vagy egy thumbnail funkció is, amely a thumbnaileket jeleniti meg, mégpedig -thumb tag hozzáadásával. A következő a problémám. Először is szeretnék minden egyes felhasználónak készíteni egy könyvtárat. Ezt az első fájl feltöltésekor akarom létrehozni. Szeretném titkosítani vagy véletlen karakter sor készítésével átírni a könytár nevét, ne a felhasznaló neve legyen. Ez után ezt le tárolom MySqlbe. Miután ez megvan, megy a képfeltöltés. Maga a képfeltöltő script kész van, és működik, csak az könytárlétrehozás nem megy. Nagyra értékelném ha tudnátok segíteni. Az alábbiakban melléklem az általam használatos feltöltő scriptet. Minden véleményt és segítséget előre is köszönök.
Barman
<?php
$upload_image_limit = 5; // How many images you want to upload at once?
$upload_dir = ""; // default script location, use relative or absolute path
$enable_thumbnails = 1 ; // set 0 to disable thumbnail creation
##################### THUMBNAIL CREATER FROM GIF / JPG / PNG
function make_thumbnails($updir, $img){
$thumbnail_width = 100;
$thumbnail_height = 100;
$thumb_preword = "-thumb";
$arr_image_details = GetImageSize("$updir"."$img");
$original_width = $arr_image_details[0];
$original_height = $arr_image_details[1];
if( $original_width > $original_height ){
$new_width = $thumbnail_width;
$new_height = intval($original_height*$new_width/$original_width);
} else {
$new_height = $thumbnail_height;
$new_width = intval($original_width*$new_height/$original_height);
}
$dest_x = intval(($thumbnail_width - $new_width) / 2);
$dest_y = intval(($thumbnail_height - $new_height) / 2);
if($arr_image_details[2]==1) { $imgt = "ImageGIF"; $imgcreatefrom = "ImageCreateFromGIF"; }
if($arr_image_details[2]==2) { $imgt = "ImageJPEG"; $imgcreatefrom = "ImageCreateFromJPEG"; }
if($arr_image_details[2]==3) { $imgt = "ImagePNG"; $imgcreatefrom = "ImageCreateFromPNG"; }
if( $imgt ) {
$old_image = $imgcreatefrom("$updir"."$img");
$new_image = imagecreatetruecolor($thumbnail_width, $thumbnail_height);
imageCopyResized($new_image,$old_image,$dest_x,
$dest_y,0,0,$new_width,$new_height,$original_width,$original_height);
$imgt($new_image,"$updir"."$img"."$thumb_preword");
}
}
################################# UPLOAD IMAGES
foreach($_FILES as $k => $v){
$img_type = "";
### $htmo .= "$k => $v<hr />"; ### print_r($_FILES);
if( !$_FILES[$k]['error'] && preg_match("#^image/#i", $_FILES[$k]['type']) && $_FILES[$k]['size'] < 1000000){
$img_type = ($_FILES[$k]['type'] == "image/jpeg") ? ".jpg" : $img_type ;
$img_type = ($_FILES[$k]['type'] == "image/gif") ? ".gif" : $img_type ;
$img_type = ($_FILES[$k]['type'] == "image/png") ? ".png" : $img_type ;
$img_rname = $_FILES[$k]['name'];
$img_path = $upload_dir.$img_rname;
copy( $_FILES[$k]['tmp_name'], $img_path );
if($enable_thumbnails) make_thumbnails($upload_dir, $img_rname);
$feedback .= "Image and thumbnail created $img_rname<br />";
}
}
############################### HTML FORM
while($i++ < $upload_image_limit){
$form_img .= '<label>Image '.$i.': </label> <input type="file" name="uplimg'.$i.'"><br />';
}
$htmo .= '
<p>'.$feedback.'</p>
<form method="post" enctype="multipart/form-data">
'.$form_img.' <br />
<input type="submit" value="Upload Images!" style="margin-left: 50px;" />
</form>
';
echo $htmo;
Illem
(Harmadrészt: használj kódszínezőt)
Koszonet
Megegyszer koszi a segitseget, es bocsanat ha kozbe vagtam barmibe is.
Szep napot.
Barman
semmi
kép tárolás módja
Amikor egy űrlapból feltöltöm a képet és a hozzá való információkat egy adatbázisba, akkor a kép igazából nem magába az adatbázisba kerül, hanem egy alkönyvtárba? Az adatbázisba pedig egy hivatkozás a képre? És ha így van, akkor az adatbázisba hogy fog konkrétan kinézni a hivatkozás ami a képre mutat? Milyen típusú az a mező ami ezt a hivatkozást tárolja (CHAR, VARCHAR)?
köszönöm előre is a válaszokat
mód...
Egyik, hogy kialakítasz egy könyvtárstruktúrát, amibe a képeket pakolod és a képfájl elérési útját helyezed el az adatbázisban. E célra leginkább varchart (Oracle-ben varchar2-t) célszerű használni. (a char általában elfoglalja a hosszának megfelelő tárhelyet, a varchar csak annyit, amekkora a benne tárolt string)
Másik variáció, hogy berakod a képet az adatbázisba, egy blob mezőbe. Sokak szerint ez nem túl nyerő ötlet. Oracle-ben, viszonylag kis méretű képek esetében (szkennel dokumentumok) már láttam működni ezt is.
A képek bináros kódjának
Marad a másik megoldás, nevezzük úgy, a képek adatainak tárolása az adatbázisban. Ebben az esetben csak információkat tárolunk a képről, úgy mint a kép neve, mérete és a kép helye a fájl rendszerben, esetleg tipusa, felhasználástól függően.
Ha képet akarsz feltölteni, javaslom a következőket:
1, nézd meg, hogyan lehet fájlt feltölteni egy formból php-val (google: php upload file)
2, csináld meg amit előző pontban tanultál, egy formot mögötte egy php scriptet ami a szerver egy adott könyvtárába feltölt egy fájlt
3, a feltöltött fájl validáld, tényleg képet töltött e fel (egy nagyon jó módszer erre getimagesize, a visszaadott tömb 2 index-ü eleme ami ide kell)
4, tervezd meg az adatbázisod, milyen adatokat kell tárolnod? ami tuti biztos kell, az a kép fájl elhelyezkedése a fájlrendszerben, lehetőleg relative a php fájlodhoz
5, most már mindened megvan, csak össze kell rakni
Nem erre lett kitalálva?
Azért ezzel vitatkoznék. Ne egy MySQL alapkonfigból induljunk ki! Konkrétan csak az Oracle-höz volt szerencsém, de ugye kitalálták a BLOB adattípust, amit külön táblatérben lehet(kell? már erre sem emlékszem :( ) tárolni. A táblateredet nem feltétlenül szükséges fájlrendszerre tenni, tolhatsz alá ú.n. raw device-t is. A felesleges I/O-k ezáltal megszűnnek. Cserébe kapsz egy konzisztens, egyetlen tranzakción belül kezelhető adathalmazt. Nem kell törődni pl. a az utolsó pillanatban valamiért visszagörgetett tranzakció után a képfájl(ok) kitakarításával, nem neked kell kitalálni, hogyan tárold a fájlokat, hogyan dobáld szét különböző könyvtárakba (fájlrendszerben nem egészséges, ha többszázezer fájlod van egyetlen könyvtáron belül) stb.
És bár programozásilag nem foglalkoztam vele, valami rémlik, hogy képek, egyéb multimédiás anyagok kezelésére vannak saját eljárásai is – bár ebben nem vagyok 100%-ig biztos.
-----
update: bocs, most fogtam fel, hogy az új kérdező is MySQL témát boncolgat. Én leragadtam a vastagbetűs résznél. :) Ettől függetlenül: a fentieket tartom. Úgy általában nem merném kijelenteni, hogy "az adatbázis nem erre való"... (akkor a BLOB adattípust mire találták ki?)
Egyébként itt egy kis írás arról, hogyan tároljunk képeket MySQL-ben: http://www.phpriot.com/articles/storing-images-in-mysql
Maradjunk abban, hogy
Képfájlok kitakarítása, doctrine-ben rekord törlésekor: onDelete event,
rekord mentésekor try-catch vagy isValid használata, hiba esetén kép delete, fájlok könyvtárba rendezésére meg ritkán van szükség, ha gallériáról van szó pl. gallériánként egy könyvtár, egy gallériába nem jellemző 10.000 kép, de ez már tervezés része a dolognak.
Sziasztok, ha már van a topic
Külön táblákban
partnerek:
- partner_id
- firstname
- lastname
- stb.
kepek:
- kep_id
- partner_id
- path
- title
- stb.
Amikor egy bizonyos partner képeit akarod, akkor:
SELECT * FROM 'kepek' WHERE 'partner_id' = szám
Erre gondoltam
blobba text, es beragadt?
köszi
ugy tudom h linuxon egy
Nincs ilyen korlátozás, maximum egy konkrét fájlrendszer implementációnak lehetnek korlátai, de a ma létező korszerű fájlrendszerek több tízezer fájlt is megengednek egy könyvtárban.
Ez mennyiben kapcsolódik a képek adatbázisban tárolásához?
PHPMyAdmin helyett használj valami olyat, ami neked kibontja a blob mezőket.
30-40e = 30-40000 myadmin
myadmin helyett mit pl?
mindegy a problema akkor is all, egy adatbazis mezo erteket 2 php fajl olvassa ki es mind2 mast mutat, mivel a mezo ertek blob ezert gondoltam itt nezelodom megoldas utan.
van a tablaban 80ezer rekord,
Problemak