5

Well guys, first, here is my code:

<?php

ob_start();

$pilot_id = $_GET['id'];

//-- Server Variables
$dbServer        = 'localhost';
$dbUser          = 'root';
$dbPassword      = '*************';
$dbName          = 'bla_tracker';

//-- Server Connection >>> DO NOT CHANGE <<<
$sql = mysql_connect("$dbServer", "$dbUser", "$dbPassword") or die(mysql_error());
$select_db = mysql_select_db("$dbName", $sql);

$query = mysql_query("SELECT * FROM acars_users WHERE `id`='".$pilot_id."' ") or die (mysql_error());
$row = mysql_fetch_array($query);
$nome = $row['nome'];
$patente = $row['rank'];
$admin = $row['admin'];
$checador = $row['checador'];

$query_horas = mysql_query("SELECT SUM(flighttime) AS `total` FROM acars_pirep WHERE iduser='".$pilot_id."'") or die (mysql_error());
$row2 = mysql_fetch_assoc($query_horas);
$total_min = $row2['total'] + ($row['horas'] * 60);
$total = round($total_min/60);

  if($admin == 1) {
     $data = "Comandante Master - $nome";
  } else {
  if($checador == 1) {
     $data = "Comandante Checador - $nome";  
  } else {
  if($patente == '4') {
     $data = "Comandante Sênior - $nome";   
  } else {
  if($patente == '3') {
     $data = "Comandante Instrutor - $nome"; 
  } else {
  if($patente == '2') {
     $data = "Comandante - $nome"; 
  } else {
  if($patente == '1') {
     $data = "Primeiro Oficial - $nome"; 
  } else {
  if($patente == '0') {
     $data = "Copiloto - $nome";     
  }}}}}}}


$rand = rand(1, 8);

$my_img = imagecreatefrompng("images/background_$rand.png");
$background = imagecolorallocate($my_img, 0, 0, 255);
$text_colour = imagecolorallocate($my_img, 255, 255, 255);


imagettftext($my_img, 11, 0, 4, 12, $text_colour, "calibril.ttf", "$data");
imagettftext($my_img, 11, 0, 340, 12, $text_colour, "calibril.ttf", "$total hrs");
imagettftext($my_img, 11, 0, 4, 98, $text_colour, "calibril.ttf", "Brasil Linhas Aéreas");
imagettftext($my_img, 11, 0, 323, 98, $text_colour, "calibril.ttf", "voebla.com");

imagesetthickness ($my_img, 5 );


header("Content-type: image/png");
imagepng($my_img);
imagecolordeallocate( $text_color );
imagecolordeallocate( $background );
imagedestroy($my_img);

?>

We changed the servers, and now, I get this:

enter image description here

What is happening?

EDIT

Setting PHP errors to ON, I get this warning:

Warning: Cannot modify header information - headers already sent by (output started at C:\Inetpub\vhosts\voebla.com\httpdocs\BLAtracker\sessoes\pilotos\modules\dados\assinatura\assinatura.php:1) in C:\Inetpub\vhosts\voebla.com\httpdocs\BLAtracker\sessoes\pilotos\modules\dados\assinatura\assinatura.php on line 68

And in line 68 we have:

header( "Content-type: image/png" );

EDIT 2

Taking a deeper look into assinatura.php, I've found out a BOM before the PHP tag, but now how to remove it?

enter image description here

Ygor Montenegro
  • 659
  • 1
  • 12
  • 26

3 Answers3

7

Found it!!!

Well! there was a BOM before the PHP tag. How to remove it, is very very simple. I'm using Adobe Dreamweaver, so here are the steps:

1 - Press CTRL + J (Page Properties);

2 - Go to the title/encoding tab, and uncheck the "Include Unicode Signature" checkbox;

enter image description here

Save the document, and the magic happens. Have no idea why I didn't get this error in the other server!


And if you don't use Adobe Dreamweaver, the Notepad++ can convert to UTF-8 without BOM (Byte Order Mask):

Notepad++: Convert to UTF-8 without BOM

Dinei
  • 4,494
  • 4
  • 36
  • 60
Ygor Montenegro
  • 659
  • 1
  • 12
  • 26
  • 1
    Side notes: (i) by the time `ob_start()` line executes PHP has already sent the BOM; this explains the "headers already sent" error with buffering being _on_ (ii) if the output is PNG (or binary data) then the file must not contain the BOM. Otherwise, the two extra bytes in the beginning will break the binary data. – Salman A May 08 '14 at 08:14
1

The output is correct but its not being recognized as a PNG. The problem is the header is not being correctly set, which is why it is not being recognized. Probably because headers are already set.

Remove ob_start() and see if that fixes it.

Otherwise check the existence of anything that would put another header on it, such as a header PHP file being added by .htaccess.

EDIT: The PHP error confirms this is the case. Something is already setting file headers. It is very likely to be .htaccess adding a header to every PHP file in this directory. This is your problem, as I do not see any other headers or echos on this script.

Alasdair
  • 13,348
  • 18
  • 82
  • 138
1

Add ob_start("ob_gzhandler"); . It may fix your problem. Where are your images? In subdirectory or in database?

Ansh
  • 94
  • 4