Mam problem ak dam v php zobrazit obrazky, ktore mam ulozene v DB(ich nazov) zobrazuju sa mi len obrazky s mensou kapacitou (tak do 60kB) ..v kode problem urcite nie je kedze mi niektore zobrazi a ine nie...ked kliknem na obrazok ktory sa nechce zobrazit vypise mi toto:
Obrázek ?http://localhost/NEWPAGE/OBRAZKY/obrazok.jpg? nelze zobrazit, protože obsahuje chyby.
ale ak dam ten isty obrazok zobrazit len v html klasicky vsetko funguje..teda obrazok nie je poskodeny... Netreba nieco nastavit v php? dik za rady...
Fórum › PHP
Problem s obrazkami
Ja jsem taky kdysi mel tento problem. Vyresil jsem ho tak, ze jsem obrazky prestal ukladat do databaze a misto toho je kopiruju do k tomu urcene slozky a v databazi mam pak jen jakysi odkaz na ten obrazek. Navic je to elegantnejsi a rychlejsi pro pozdejsi zpracovani obrazku.
Zkus sem hodit k?dy, jak obr?zky do datab?ze ukl?d?? a jak je od tamtud vytahuje? a zobrazuje?.
Zrovna ned?vno jsem byl nucen se t?mto probl?mem zab?vat, tak bych Ti mo?n? dovedl poradit.
Nic neslibuju, ale zkusit to m??u :cigo:
nie som odbornik na php takze niektore veci riesim nie tak ako by sa malo:)
takze aby som nemusel ukladat kazdy obrazok rucne do db... pouzil som len toto
if ($send):
if (is_uploaded_file($_FILES["file"]["tmp_name"])):
$filename=$_FILES["file"]["name"];
$filesize=round($_FILES["file"]["size"]/1024);
MySQL_Query("INSERT INTO photo VALUES('','$filename','$kategoria','$filesize')");
endif;
endif;
a vypis je takto...
<?php
$i=1;
@$fot = mysql_query("select * from photo where kategoria='$kat'");
while($f_n = mysql_fetch_array($fot))
{
if($i==1)echo "<tr>";
?>
<td><a href="index.php?page=image&id_ob=<?php echo"$f_n[id_ob]";?>"><img src="OBRAZKY/<?php echo"$f_n[ob_name]";?>" width="100" border="0" title="Klikni pre detajli obrazka"></a></td>
<?php
if($i==4){echo "</tr>";$i=0;}
$i++;
}
?>
dakujem za kazdu pomoc aj snahu:)
EDIT: ?e Ty m?? ten sloupec v tabulce, kam ukl?d?? obr?zky typu BLOB?
Jestli jo, tak je to jasn?: typ BLOB pojme maxim?ln? 65.535 bajt?, co? je zhruba 60 kB. Pokud se pokus?? vlo?it v?ce, p?eb?vaj?c? data se o??znou a t?m p?dem je ten obr?zek samoz?ejm? po?kozen?!
Nastav ten sloupec na typ MEDIUMBLOB (16.777.215 bajt?) nebo LONGBLOB (4.294.967.295 bajt?), pak bude? moci vkl?dat v?t?? obr?zky.
A t?m p?dem u? ani nemus?? ??st d?l :))
Ale mazat u? to nebudu:
J? jsem teda ty Tv? k?dy moc nepochopil, ale to je t?m, ?e to d?l?m jinak.
Nap??u Ti tady aspo?, jak to d?l?m j?:
Ulo?en? obr?zku do datab?ze:
$obrazek = fopen("obrazek.jpg", "r"); // otev?eme soubor obr?zku pro ?ten?
$binarni_data = fread($obazek, filesize("obrazek.jpg")); // na?teme obsah do prom?nn?
$binarni_data = addslashes($binarni_data); // pro jistotu oescapujeme
// a ulo??me do datab?ze
$db_dotaz = "INSERT INTO tabulka (obrazek, velikost) VALUES ('".$binarni_data.'", '".filesize("obrazek.jpg")."')";
$db_poloz_dotaz = @mysql_query($db_dotaz);
if (!$db_poloz_dotaz) {
$chybove_hlaseni = "P?i pokl?d?n? dotazu datab?zi do?lo k chyb?: ".mysql_error();
}
Script generuj?c? obr?zek (ten, co jej vyt?hne z datab?ze - je zvl?, nen? sou??st? html souboru), dejme tomu, ?e ho ulo??me jako obrazek.php:
if (isset($_GET["id_obrazku"])) {
$db_dotaz = "SELECT * FROM tabulka WHERE id = '".$_GET["id_obrazku"]."'";
$db_poloz_dotaz = mysql_query($db_dotaz);
if (!$db_poloz_dotaz) {
$chybove_hlaseni = "P?i pokl?d?n? dotazu datab?zi do?lo k chyb?: ".mysql_error();
} else {
$vysledek = mysql_fetch_array($db_poloz_dotaz);
Header("Content-Type: image/jpeg"); // tady ?ekneme prohl??e?i, ?e vypisovan? data jsou obr?zek
echo $vysledek["obrazek"]; // tady se vyp??? data obr?zku z datab?ze, ale v tomto scriptu s nimi pracovat nebudeme
}
}
No, a tohle u? vlo??? do str?nky, na kter? chce? ten obr?zek z datab?ze zobrazit:
<img src="obrazek.php?id_obrazku=1"/>
To? v?e. Douf?m, ?e je to pochopiteln? a ?e tam nejsou chyby.
Sloupec tabulky v datab?zi, do kter?ho se ukl?d? obr?zek, mus? b?t samoz?ejm? typu BLOB!
J? to takhle pou??v?m a funguje to s jakkoli velk?mi obr?zky.
sposobom co som pisal ja len prostrendictvom formularu ukladam do db len nazov obrazku nic viac... typ mam len varchar(255) a niekedy sa mi nechcu zobrazit ani tie male obrazky niekedy to ide niekedy zase nie.. to iste mi robi aj s flash animaciami a obrazkami ktore nemam vobec v db..
Tak?e Ty do datab?ze ukl?d?? jen n?zev obr?zku?
A k ?emu to je? V?dy? j? nikde v tom Tv?m scriptu nevid?m funkci move_uploaded_file() nebo copy(), kter? ten obr?zek zkop?ruje z do?asn? slo?ky pro uploadovan? soubory do n?jak? slo?ky na Tv?m serveru.
Z t? do?asn? slo?ky jsou uploadnut? soubory odstran?ny hned po skon?en? scriptu.
Nav?c $_FILES["file"]["name"] obsahuje pouze n?zev souboru na po??ta?i u?ivatele bez uveden? cesty a ne n?zev souboru, jak ho ulo??? na sv?j server.
Ja pouzivam ten formular len na to aby som nemusel rucne pisat nazvy obrazkov do db kedze niektore maju nazov PS002356,PS002357...adt. a je ich vela.. ja mam uz tie fotky ulozene na servery v samostatnej zlozke..z DB len vyberiem nazov toho obrazku...kopirovat ho uz nikam nemusim... zatial to mam len na mojom PC, ked to supnem na server snad pojde normalne:)
V kode by som chybu nehladal, aj ked je dost svojsky napisany :)) . Raz som tiez tento problem riesil. Raz sa mi obrazky zobrazovali, inokedy nie. Nakoniec som to niejako vyriesil, ale teraz (aj keby ma mucili) si uz nespomeniem v com bola chyba.
Ale mam taky maly tusak, ze to bolo zlym nakonfigurovanim Apache. Defaultne nastaveny port na ktorom pocuva Apache poziadavky je 80 a prave tento isty port mi vyuzivala niejaka ina aplikacia. Tym sa Apache zapasil s tou aplikaciou a raz mi isiel a raz nie. Port som nastavil na 8080 a bolo vyriesene. Ale naozaj teraz uz netusim, ci to bol tento problem. :((
Skus sa pozriet ked sa ti obrazok nezobrazi do vygenerovaneho HTML kodu, ci je kompletny. Ak ti tam nieco nebude sediet, tak problem je ten co som popisal, ak je vporiadku tak chyba bude inde (mozno zle nakonfigurovana databaza, alebo zle zavedeny PHP ako modul do Apache).
Co takhle použít specializované obrázkové funkce
<?
Header("Content-type: image/jpeg");
$im = imagecreatefromjpeg("./test.jpg");
Imagejpeg($im,'',20);
ImageDestroy($im);
?>
Jpeg ve všech funkcích můžeš nahradit gif nebo png. Všechny funkce image* vyžadují knihovnu GD.
no asi mam zle nastavenie apachu... umiestnil som na web aj flash animaciu ktora obsahuje aj preloader vzhladom na jej velkost.. pri otvoreni stranky sa mi animacia nezobrazuje vobec alebo sa mi nacita po castiach ked dam viackrat refresh celej stranky v prehliadaci (pri obrazkoch mi ukaze stvrtinu a po dalsom refreshi polku alebo nic atd..). Robi si to co chce.. Neviem sa z toho vymotat...
ako test som vyskusal len jednoduchy html kod ulozeny ako php subor:
<html>
<head>
<title>Title here!</title>
</head>
<body>
<table align="center">
<tr><td>
<img src="OBRAZKY/img.jpg">
</td></tr>
</table>
</body>
</html>
subor img.jpg ma priblizne 700Kb a zobrazilo mi z neho len cast alebo vobec nic.. ako keby bol port na chvilu otvoreny a subor sa nestihol zobrazit cely alebo co..nevyznam sa do toho.. zatial mi web pracuje len na localhoste...?
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
PHP a práca s obrázkami — založil george
Praca s vacsimi obrazkami v C# — založil Jaro
Laravel - pridanie clanku s obrazkami + oznacenie profiloveho — založil miiisapiiisa
Problem — založil Ghosta
Moderátoři diskuze