مشکل با تابع header

shahinshyd

Member
با سلام
من یک مشکلی تو این کد دارم و اون هم کار با تابع header هست .من تا اونجا که اطلاع دارم هر صفحه php دارای یک header هست که شامل اطلاعاتی از ساختار صفحه است و برای استفاده از تابع Header نباید قبلش هیچ خروجی داشته باشیم و باید اول صفحه فراخوانی بشه ولی گاهی میشه که ما میخوایم تحت شرایط خاصی از Header استفاده کنیم
مثلا

PHP:
<?php 
function ali()
{
   
/*******************************************
  Database query to get poll info 
*******************************************/

// get vote from form
$vote=$_REQUEST['vote'];

// log in to database 
if (!$db_conn = mysql_connect('localhost','root', ''))
{
  echo 'Could not connect to db<br />';
  exit;
};
@mysql_select_db('db_news');

if (!empty($vote))  // if they filled the form out, add their vote
{
  $vote = addslashes($vote); 
  $query = "update poll_results
            set num_votes = num_votes + 1
            where candidate = '$vote'";
  if(!($result = @mysql_query($query, $db_conn)))
  {
    echo 'Could not connect to db<br />';
    exit;
  }
};

// get current results of poll, regardless of whether they voted 
$query = 'select * from poll_results';
if(!($result = @mysql_query($query, $db_conn)))
{
  echo 'Could not connect to db<br />';
  exit;
}
$num_candidates = mysql_num_rows($result); 

// calculate total number of votes so far
$total_votes=0;
while ($row = mysql_fetch_object ($result)) 
{
    $total_votes +=  $row->num_votes;
}
mysql_data_seek($result, 0);  // reset result pointer


/*******************************************
  Initial calculations for graph 
*******************************************/
// set up constants
putenv('GDFONTPATH=C:\WINDOWS\Fonts');
$width=500;        // width of image in pixels - this will fit in 640x480
$left_margin = 50; // space to leave on left of graph
$right_margin= 50; // ditto right   
$bar_height = 40;  
$bar_spacing = $bar_height/2; 
$title_size= 16; // point
$main_size= 12; // point
$small_size= 12; // point
$text_indent = 10; // position for text labels from edge of image

// set up initial point to draw from
$x = $left_margin + 60;  // place to draw baseline of the graph
$y = 50;          // ditto 
$bar_unit = ($width-($x+$right_margin)) / 100;   // one "point" on the graph

// calculate height of graph - bars plus gaps plus some margin
$height = $num_candidates * ($bar_height + $bar_spacing) + 50;   

/*******************************************
  Set up base image 
*******************************************/
// create a blank canvas
$im = ImageCreateTrueColor($width,$height);   
     
// Allocate colors   
$white=ImageColorAllocate($im,255,255,255);   
$blue=ImageColorAllocate($im,0,64,128);   
$black=ImageColorAllocate($im,0,0,0);   
$pink = ImageColorAllocate($im,255,78,243); 

$text_color = $black;
$percent_color = $black;
$bg_color = $white;
$line_color = $black;
$bar_color = $blue;
$number_color = $pink;

// Create "canvas" to draw on 
ImageFilledRectangle($im,0,0,$width,$height,$bg_co  lor);   

// Draw outline around canvas 
ImageRectangle($im,0,0,$width-1,$height-1,$line_color);   

// Add title
$title = 'Poll Results';
$title_dimensions = ImageTTFBBox($title_size, 0, "arial.ttf", $title);
$title_length = $title_dimensions[2] - $title_dimensions[0];
$title_height = abs($title_dimensions[7] - $title_dimensions[1]);
$title_above_line = abs($title_dimensions[7]);
$title_x = ($width-$title_length)/2;  // center it in x 
$title_y = ($y - $title_height)/2 + $title_above_line; // center in y gap
ImageTTFText($im, $title_size, 0, $title_x, $title_y, 
             $text_color, "arial.ttf", $title);  

// Draw a base line from a little above first bar location 
// to a little below last  
ImageLine($im, $x, $y-5, $x, $height-15, $line_color);   

/*******************************************
  Draw data into graph 
*******************************************/
// Get each line of db data and draw corresponding bars   
while ($row = mysql_fetch_object ($result)) 
{
  if ($total_votes > 0)
    $percent = intval(round(($row->num_votes/$total_votes)*100));
  else 
    $percent = 0;

  // display percent for this value  
  $percent_dimensions = ImageTTFBBox($main_size, 0, "arial.ttf", $percent.'%');
  $percent_length = $percent_dimensions[2] - $percent_dimensions[0];
  ImageTTFText($im, $main_size, 0, $width-$percent_length-$text_indent, 
               $y+($bar_height/2), $percent_color, "arial.ttf", $percent.'%');  
  
  if ($total_votes > 0)
    $right_value = intval(round(($row->num_votes/$total_votes)*100));
  else
    $right_value = 0;

  // length of bar for this value   
  $bar_length = $x + ($right_value * $bar_unit);   

  // draw bar for this value   
  ImageFilledRectangle($im, $x, $y-2, $bar_length, $y+$bar_height, $bar_color);   

  // draw title for this value   
  ImageTTFText($im, $main_size, 0, $text_indent, $y+($bar_height/2), 
               $text_color, "arial.ttf", "$row->candidate");  

  // draw outline showing 100% 
  ImageRectangle($im, $bar_length+1, $y-2, 
                ($x+(100*$bar_unit)), $y+$bar_height, $line_color);   

  // display numbers   
  ImageTTFText($im, $small_size, 0, $x+(100*$bar_unit)-50, $y+($bar_height/2),
               $number_color, "arial.ttf", $row->num_votes.'/'.$total_votes);

  // move down to next bar
  $y=$y+($bar_height+$bar_spacing);   
}   

/*******************************************
  Display image 
*******************************************/

header('Content-type:image/png');
ImagePNG($im);   

/*******************************************
  Clean up 
*******************************************/
ImageDestroy($im); 
}
?>
<html>
<body>
<p style="float:right">Its like comparing apples to oranges.</p>
<?php ali();?>
</body>
</html>


تو این مثال بعد از دریافت اطلاعات از یک فرم نظر سنجی نتیجه اون نمایش داده میشه ولی مشکل من این هست که پیغام خطا زیر رو میده
کد HTML:
Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\d\show_poll.php:174) in C:\xampp\htdocs\d\show_poll.php on line 162
من تو سایت php.net گشتم اونجا چند تا تابع معرفی کرده بود
PHP:
ob_start("")
ob_end_flush()
ob_end_clean()
ولی من هر کاری کردم نتونستم در این کد ازشون استفاده کنم
یه جای دیگه هم یه راه دیگه نوشته بود
که باید encoding فایل رو به uft-8 without bom تبدیل کنیم ولی این روش جواب نداد
 

Masoud1365

مدیر انجمن
برای استفاده از تابع Header نباید قبلش هیچ خروجی داشته باشیم
همونطور که میدونید نباید خروجی داشته باشید ! ارروری هم که به شما داده دلیلش اینه که خروجی دارید البته این خروجی حتما نباید تکست یا عکس یا ... باشه ممکن هست که شما یک فاصله رو ناخواسته به خروجی فرستاده باشید ! ( یعنی چک کنید ببینید فاصله ( Space ) به خروجی نفرستاده باشید ! )
 

shahinshyd

Member
با تشکر
شما کتابی واسه واسه کار با تابع header سراغ ندارید
تو اکثر کتاب های پی اچ پی توضیحی درمورد این تابع نداده یا مختصرا یه چیزی گفته
از سایت php.net هم چیز زیادی نفهمیدم
 

Masoud1365

مدیر انجمن
کلا تابع هدر چیزه خاصی نداره !
راستش منبع فارسی به درد بخور سراغ ندارم !
اگر انگلیسیت خوب هست که توی سایت php و اینا توضیحات در موردش کامل هست !
 

Y.P.Y

Well-Known Member
با این Redirect/Header بزن و کیف کن:

PHP:
function Redirect($Str_Location, $Bln_Replace= 1, $Int_HRC= NULL)
{

		if(!headers_sent())
		{
			header('location: ' . urldecode($Str_Location), $Bln_Replace, $Int_HRC);
			exit();
		}

	exit('<meta http-equiv="refresh" content="0; url=' . urldecode($Str_Location) . '"/>'); # | exit('<script>document.location.href=' . urldecode($Str_Location) . ';</script>');
	return;
}
 

جدیدترین ارسال ها

بالا