Прощу прощения за назайливость. Я очередной раз задаю вопрос связанный с написанием топа Гильдий.

У меня осталась единственная проблема. Это вытащить эмблему из БД. Не просто вытащить, а еще и динамически эти эмблемы формировать на странице.
Мне уже немного помогли, но всё-равно пока ничего не получается.
Вот код:
Код
<?php
include('config.php');
$id = $_GET['guild'];
$sql = "SELECT * FROM `guild` WHERE `guild_id` = '$id'";
$result = mysql_query($sql);
$row = mysql_fetch_assoc($result);
$emblem= $row['emblem_data'];
if ($emblem=="")
{
header("Location: emblem_0.bmp");
}
$emblem=@gzuncompress(pack('H*',$emblem));
if (!headers_sent())
{
header("Content-Type: image/bitmap");
echo $emblem;
exit;
}
else
{
echo "Error";
exit;
}
?>
include('config.php');
$id = $_GET['guild'];
$sql = "SELECT * FROM `guild` WHERE `guild_id` = '$id'";
$result = mysql_query($sql);
$row = mysql_fetch_assoc($result);
$emblem= $row['emblem_data'];
if ($emblem=="")
{
header("Location: emblem_0.bmp");
}
$emblem=@gzuncompress(pack('H*',$emblem));
if (!headers_sent())
{
header("Content-Type: image/bitmap");
echo $emblem;
exit;
}
else
{
echo "Error";
exit;
}
?>
Этот скрипт вроде работает, но никакого изображения не выдает.
Выдаёт Error.
Очень прошу помочь.
Или дайте, пожалуйста, какой-либо линк на ресурс посвященный этой теме.
Спустя 27 дней, 22 часа, 7 минут, 13 секунд (5.12.2007 - 16:54) Symbiot написал(а):
Ребят, неужели никто не знает?
Вот мои недавние попытки:
Функция imagecreatefrombmpstring() работает. (Если её тестить отдельно).
Но в данном случае происходят ошибки такого вида:
Warning: Cannot modify header information - headers already sent by (output started at s:\home\localhost\www\turn\top_guild.php:112) in s:\home\localhost\www\turn\top_guild.php on line 96
‰PNG пїЅпїЅпїЅ
Я знаю, что это за ошибка, но не знаю как её исправить? Мне ведь эти эмблемы необходимо вывести в таблице. Поэтому идет использование тегов и echo.
Как сделать так, чтобы не возникало ошибки уже отправленных заголовков? И чтобы эти эмблемы динамически формировались.
Вот мои недавние попытки:
Код
<?php
include('config.php');
function emblema($embl){
function imagecreatefrombmpstring($im) {
$header = unpack("vtype/Vsize/v2reserved/Voffset", substr($im,0,14));
$info = unpack("Vsize/Vwidth/Vheight/vplanes/vbits/Vcompression/Vimagesize/Vxres/Vyres/Vncolor/Vimportant", substr($im,14,40));
extract($info);
extract($header);
if($type != 0x4D42) return false;
$palette_size = $offset - 54;
$ncolor = $palette_size / 4;
$imres=imagecreatetruecolor($width,$height);
imagealphablending($imres,false);
imagesavealpha($imres,true);
$pal=array();
if($palette_size) {
$palette = substr($im, 54, $palette_size);
$gd_palette = "";
$j = 0; $n=0;
while($j < $palette_size) {
$b = ord($palette{$j++});
$g = ord($palette{$j++});
$r = ord($palette{$j++});
$a = ord($palette{$j++});
if ( ($r==255) && ($g==0) && ($b==255)) $a=127; // alpha = 255 on 0xFF00FF
$pal[$n++]=imagecolorallocatealpha($imres, $r, $g, $b, $a);
}
}
$scan_line_size = (($bits * $width) + 7) >> 3;
$scan_line_align = ($scan_line_size & 0x03) ? 4 - ($scan_line_size & 0x03): 0;
for($i = 0, $l = $height - 1; $i < $height; $i++, $l--) {
$scan_line = substr($im, $offset + (($scan_line_size + $scan_line_align) * $l), $scan_line_size);
if($bits == 24) {
$j = 0; $n=0;
while($j < $scan_line_size) {
$b = ord($scan_line{$j++});
$g = ord($scan_line{$j++});
$r = ord($scan_line{$j++});
$a = 0;
if ( ($r==255) && ($g==0) && ($b==255)) $a=127; // alpha = 255 on 0xFF00FF
$col=imagecolorallocatealpha($imres, $r, $g, $b, $a);
imagesetpixel($imres, $n++, $i, $col);
}
}
else if($bits == 8) {
$j=0;
while($j<$scan_line_size) {
$col=$pal[ord($scan_line{$j++})];
imagesetpixel($imres, $j-1, $i, $col);
}
}
else if($bits == 4) {
$j = 0; $n=0;
while($j < $scan_line_size) {
$byte = ord($scan_line{$j++});
$p1 = $byte >> 4;
$p2 = $byte & 0x0F;
imagesetpixel($imres, $n++, $i, $pal[$p1]);
imagesetpixel($imres, $n++, $i, $pal[$p2]);
}
}
else if($bits == 1) {
$j = 0; $n=0;
while($j < $scan_line_size) {
$byte = ord($scan_line{$j++});
$p1 = (int) (($byte & 0x80) != 0);
$p2 = (int) (($byte & 0x40) != 0);
$p3 = (int) (($byte & 0x20) != 0);
$p4 = (int) (($byte & 0x10) != 0);
$p5 = (int) (($byte & 0x08) != 0);
$p6 = (int) (($byte & 0x04) != 0);
$p7 = (int) (($byte & 0x02) != 0);
$p8 = (int) (($byte & 0x01) != 0);
imagesetpixel($imres, $n++, $i, $pal[$p1]);
imagesetpixel($imres, $n++, $i, $pal[$p2]);
imagesetpixel($imres, $n++, $i, $pal[$p3]);
imagesetpixel($imres, $n++, $i, $pal[$p4]);
imagesetpixel($imres, $n++, $i, $pal[$p5]);
imagesetpixel($imres, $n++, $i, $pal[$p6]);
imagesetpixel($imres, $n++, $i, $pal[$p7]);
imagesetpixel($imres, $n++, $i, $pal[$p8]);
}
}
}
return $imres;
}
$query_emblem = mysql_query("SELECT `emblem_data` FROM `guild` WHERE `guild_id` = $embl");
$nb_emblem = mysql_num_rows( $query_emblem );
$fetch_emblem = mysql_fetch_array( $query_emblem );
$ebm=$fetch_emblem['emblem_data'];
if( $nb_emblem != 0 && $ebm != 0 )
{
$ebm=@gzuncompress(pack('H*',$ebm));
$im=imagecreatefrombmpstring($ebm);
header('Content-Type: image/png');
imagepng($im);
exit;
}
$im = imagecreate(24, 24);
$background_color = imagecolorallocatealpha ($im, 255, 0, 255,127);
imagecolortransparent($im, $background_color);
header ('Content-type: image/png');
imagepng($im);
exit;
}
DEFINE('LADDER', "SELECT `guild`.`emblem_id`, `guild`.`name`, `guild`.`master`, `guild`. `guild_lv`, `guild`.`exp`, `guild`.`max_member`, `guild`.`guild_id` FROM `guild` ORDER BY `guild`.`guild_lv` DESC");
$test = sprintf(LADDER);
$res = mysql_query($test);
$heads = array("Место", "Эмблема", "Наименование", "GuildMaster", "Level", "Exp", "Members");
echo "<html><title>Top Guild</title>";
echo "<center><table border width = \"800\">\n";
if ($heads)
{
$n = sizeof($heads);
for ($i=0; $i < $n; $i++)
echo "<TH>".$heads[$i]."</TH>";
}
$n = sizeof($res);
for ($i = 1; $i <= $n+1; $i++)
{
$temp = mysql_fetch_row($res);
// $Embl = $temp[0];
$Name = $temp[1];
$gm = $temp[2];
$lvl = $temp[3];
$exp = $temp[4];
// $con_memb = $temp[5];
$max_memb = $temp[5];
$query = "SELECT `guild_member`.`name` FROM `guild_member` WHERE `guild_member`.`guild_id` = '$lvl'";
$result = mysql_query($query);
while ($temp = mysql_fetch_row($result))
{
$num = sizeof($temp);
}
echo $num;
$embl = 2;
echo "<TR bgcolor=\"#E5EAF5\">\n";
echo "<td><center>$i</center></td>
<td><center>";
emblema($embl);
echo "</center></td>
<td><center><a href=\"http://localhost/Turn/test.php?name=$Name\">$Name</a></center></td>
<td><center>$gm</center></td>
<td><center>$lvl</center></td>
<td><center>$exp</center></td>
<td><center>$max_memb</center></td>";
}
echo "</TR></table></center></html>";
mysql_close();
?>
include('config.php');
function emblema($embl){
function imagecreatefrombmpstring($im) {
$header = unpack("vtype/Vsize/v2reserved/Voffset", substr($im,0,14));
$info = unpack("Vsize/Vwidth/Vheight/vplanes/vbits/Vcompression/Vimagesize/Vxres/Vyres/Vncolor/Vimportant", substr($im,14,40));
extract($info);
extract($header);
if($type != 0x4D42) return false;
$palette_size = $offset - 54;
$ncolor = $palette_size / 4;
$imres=imagecreatetruecolor($width,$height);
imagealphablending($imres,false);
imagesavealpha($imres,true);
$pal=array();
if($palette_size) {
$palette = substr($im, 54, $palette_size);
$gd_palette = "";
$j = 0; $n=0;
while($j < $palette_size) {
$b = ord($palette{$j++});
$g = ord($palette{$j++});
$r = ord($palette{$j++});
$a = ord($palette{$j++});
if ( ($r==255) && ($g==0) && ($b==255)) $a=127; // alpha = 255 on 0xFF00FF
$pal[$n++]=imagecolorallocatealpha($imres, $r, $g, $b, $a);
}
}
$scan_line_size = (($bits * $width) + 7) >> 3;
$scan_line_align = ($scan_line_size & 0x03) ? 4 - ($scan_line_size & 0x03): 0;
for($i = 0, $l = $height - 1; $i < $height; $i++, $l--) {
$scan_line = substr($im, $offset + (($scan_line_size + $scan_line_align) * $l), $scan_line_size);
if($bits == 24) {
$j = 0; $n=0;
while($j < $scan_line_size) {
$b = ord($scan_line{$j++});
$g = ord($scan_line{$j++});
$r = ord($scan_line{$j++});
$a = 0;
if ( ($r==255) && ($g==0) && ($b==255)) $a=127; // alpha = 255 on 0xFF00FF
$col=imagecolorallocatealpha($imres, $r, $g, $b, $a);
imagesetpixel($imres, $n++, $i, $col);
}
}
else if($bits == 8) {
$j=0;
while($j<$scan_line_size) {
$col=$pal[ord($scan_line{$j++})];
imagesetpixel($imres, $j-1, $i, $col);
}
}
else if($bits == 4) {
$j = 0; $n=0;
while($j < $scan_line_size) {
$byte = ord($scan_line{$j++});
$p1 = $byte >> 4;
$p2 = $byte & 0x0F;
imagesetpixel($imres, $n++, $i, $pal[$p1]);
imagesetpixel($imres, $n++, $i, $pal[$p2]);
}
}
else if($bits == 1) {
$j = 0; $n=0;
while($j < $scan_line_size) {
$byte = ord($scan_line{$j++});
$p1 = (int) (($byte & 0x80) != 0);
$p2 = (int) (($byte & 0x40) != 0);
$p3 = (int) (($byte & 0x20) != 0);
$p4 = (int) (($byte & 0x10) != 0);
$p5 = (int) (($byte & 0x08) != 0);
$p6 = (int) (($byte & 0x04) != 0);
$p7 = (int) (($byte & 0x02) != 0);
$p8 = (int) (($byte & 0x01) != 0);
imagesetpixel($imres, $n++, $i, $pal[$p1]);
imagesetpixel($imres, $n++, $i, $pal[$p2]);
imagesetpixel($imres, $n++, $i, $pal[$p3]);
imagesetpixel($imres, $n++, $i, $pal[$p4]);
imagesetpixel($imres, $n++, $i, $pal[$p5]);
imagesetpixel($imres, $n++, $i, $pal[$p6]);
imagesetpixel($imres, $n++, $i, $pal[$p7]);
imagesetpixel($imres, $n++, $i, $pal[$p8]);
}
}
}
return $imres;
}
$query_emblem = mysql_query("SELECT `emblem_data` FROM `guild` WHERE `guild_id` = $embl");
$nb_emblem = mysql_num_rows( $query_emblem );
$fetch_emblem = mysql_fetch_array( $query_emblem );
$ebm=$fetch_emblem['emblem_data'];
if( $nb_emblem != 0 && $ebm != 0 )
{
$ebm=@gzuncompress(pack('H*',$ebm));
$im=imagecreatefrombmpstring($ebm);
header('Content-Type: image/png');
imagepng($im);
exit;
}
$im = imagecreate(24, 24);
$background_color = imagecolorallocatealpha ($im, 255, 0, 255,127);
imagecolortransparent($im, $background_color);
header ('Content-type: image/png');
imagepng($im);
exit;
}
DEFINE('LADDER', "SELECT `guild`.`emblem_id`, `guild`.`name`, `guild`.`master`, `guild`. `guild_lv`, `guild`.`exp`, `guild`.`max_member`, `guild`.`guild_id` FROM `guild` ORDER BY `guild`.`guild_lv` DESC");
$test = sprintf(LADDER);
$res = mysql_query($test);
$heads = array("Место", "Эмблема", "Наименование", "GuildMaster", "Level", "Exp", "Members");
echo "<html><title>Top Guild</title>";
echo "<center><table border width = \"800\">\n";
if ($heads)
{
$n = sizeof($heads);
for ($i=0; $i < $n; $i++)
echo "<TH>".$heads[$i]."</TH>";
}
$n = sizeof($res);
for ($i = 1; $i <= $n+1; $i++)
{
$temp = mysql_fetch_row($res);
// $Embl = $temp[0];
$Name = $temp[1];
$gm = $temp[2];
$lvl = $temp[3];
$exp = $temp[4];
// $con_memb = $temp[5];
$max_memb = $temp[5];
$query = "SELECT `guild_member`.`name` FROM `guild_member` WHERE `guild_member`.`guild_id` = '$lvl'";
$result = mysql_query($query);
while ($temp = mysql_fetch_row($result))
{
$num = sizeof($temp);
}
echo $num;
$embl = 2;
echo "<TR bgcolor=\"#E5EAF5\">\n";
echo "<td><center>$i</center></td>
<td><center>";
emblema($embl);
echo "</center></td>
<td><center><a href=\"http://localhost/Turn/test.php?name=$Name\">$Name</a></center></td>
<td><center>$gm</center></td>
<td><center>$lvl</center></td>
<td><center>$exp</center></td>
<td><center>$max_memb</center></td>";
}
echo "</TR></table></center></html>";
mysql_close();
?>
Функция imagecreatefrombmpstring() работает. (Если её тестить отдельно).
Но в данном случае происходят ошибки такого вида:
Warning: Cannot modify header information - headers already sent by (output started at s:\home\localhost\www\turn\top_guild.php:112) in s:\home\localhost\www\turn\top_guild.php on line 96
‰PNG пїЅпїЅпїЅ
Я знаю, что это за ошибка, но не знаю как её исправить? Мне ведь эти эмблемы необходимо вывести в таблице. Поэтому идет использование тегов и echo.
Как сделать так, чтобы не возникало ошибки уже отправленных заголовков? И чтобы эти эмблемы динамически формировались.
Спустя 3 часа, 6 минут, 30 секунд (5.12.2007 - 20:00) EvPut написал(а):
Цитата(Symbiot @ 5.12.2007, 15:54) [snapback]30219[/snapback]
Ребят, неужели никто не знает?
Вот мои недавние попытки:
Функция imagecreatefrombmpstring() работает. (Если её тестить отдельно).
Но в данном случае происходят ошибки такого вида:
Warning: Cannot modify header information - headers already sent by (output started at s:\home\localhost\www\turn\top_guild.php:112) in s:\home\localhost\www\turn\top_guild.php on line 96
‰PNG пїЅпїЅпїЅ
Я знаю, что это за ошибка, но не знаю как её исправить? Мне ведь эти эмблемы необходимо вывести в таблице. Поэтому идет использование тегов и echo.
Как сделать так, чтобы не возникало ошибки уже отправленных заголовков? И чтобы эти эмблемы динамически формировались.
Вот мои недавние попытки:
Функция imagecreatefrombmpstring() работает. (Если её тестить отдельно).
Но в данном случае происходят ошибки такого вида:
Warning: Cannot modify header information - headers already sent by (output started at s:\home\localhost\www\turn\top_guild.php:112) in s:\home\localhost\www\turn\top_guild.php on line 96
‰PNG пїЅпїЅпїЅ
Я знаю, что это за ошибка, но не знаю как её исправить? Мне ведь эти эмблемы необходимо вывести в таблице. Поэтому идет использование тегов и echo.
Как сделать так, чтобы не возникало ошибки уже отправленных заголовков? И чтобы эти эмблемы динамически формировались.
Cмысл следующй:
Функцию по выводу изображения помещаете в отдельный файл, которому будут передаваться пареметры, исходя из которых из базы будет выбираться необходимое изображение, формироваться и выдаваться через Header. Больше ничего, типа echo т.п.
Далее, в то место, где необходимо вывести изображение, вставляете <img> c именем файла и параметрами вывода.
Например:
Код
echo"<td><center><img src=\"getimagepng.php?id=12\" border=\"0\"><center></td>";
Спустя 43 минуты, 31 секунда (5.12.2007 - 20:44) Symbiot написал(а):



Работает!
Ну наконец-то! Я 2 месяца мучался с этой проблемой.
EvPut, спасибо тебе огромное!!! Просто выручил!

_____________