2010-09-16 76 views
0

幾個月前我啓用了GD在本地主機上發揮與它周圍一下,發現使用各種腳本聯機以獲取更好的理解它做什麼,都好和好。PHP GD頭問題

但現在我覺得我是因爲想重複上面有我不斷收到標題錯誤,本地和遠程主機上的完全相同的腳本時降入瘋狂這裏。我想我必須完全忘記如何做到這一點,所以我需要對此進行簡要回顧。

例如,這是我曾經嘗試過的第一個腳本:

$my_img = imagecreate(200, 80); 
$background = imagecolorallocate($my_img, 0, 0, 255); 
$text_colour = imagecolorallocate($my_img, 255, 255, 0); 
$line_colour = imagecolorallocate($my_img, 128, 255, 0); 
imagestring($my_img, 4, 30, 25, "thesitewizard.com", 
$text_colour); 
imagesetthickness ($my_img, 5); 
imageline($my_img, 30, 45, 165, 45, $line_colour); 

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

Source

工作得很好回去以後,現在當我運行它,我得到這個:

警告:不能修改標題信息 - 頭已經發出(輸出開始H:\ XAMPP \ htdocs中\測試\的script.php:1)H:\ XAMPP \ htdocs中\上線11 PNG IHDR測試\ script.php的 P ! # PLTE M )B IDATH 1 0EA N : 8Q JN d Z ��! � ���k�Z⊜���k��g�˕��|K$�M��|)��$ů8DfRQB���-��[I��tźR�+���%�"��Ut)(�K�@dF�e�zKF9&�g|C7i��d��\G�Y � �3y�Ƌ�_�%�����IEND�B

警告:錯誤的參數計數在H imagecolordeallocate():\ XAMPP \ htdocs中\上線路測試\的script.php 13

警告:imagecolordeallocate()H中錯誤的參數計數:\ XAMPP \ htdocs中\上線14

測試\ script.php的

警告:imagecolordeallocate()H中錯誤的參數計數:\ XAMPP \ htdocs中\上線測試\ script.php的15

因爲我沒有試過,第二腳本

同樣的事情:

// create a 200*200 image 
$img = imagecreatetruecolor(200, 200); 

// allocate some colors 
$white = imagecolorallocate($img, 255, 255, 255); 
$red = imagecolorallocate($img, 255, 0, 0); 
$green = imagecolorallocate($img, 0, 255, 0); 
$blue = imagecolorallocate($img, 0, 0, 255); 

// draw the head 
imagearc($img, 100, 100, 200, 200, 0, 360, $white); 
// mouth 
imagearc($img, 100, 100, 150, 150, 25, 155, $red); 
// left and then the right eye 
imagearc($img, 60, 75, 50, 50, 0, 360, $green); 
imagearc($img, 140, 75, 50, 50, 0, 360, $blue); 

// output image in the browser 
header("Content-type: image/png"); 
imagepng($img); 

// free memory 
imagedestroy($img); 

Source

那現在輸出:

警告:不能更改頭信息 - 頭已經發出(輸出開始H:\ XAMPP \ htdocs中\測試\ script.php的:1)在第22行的H:\ xampp \ htdocs \ tests \ script.php中 「PNG」IHDR「」:9 gIDATx v H a < 4Ƹ ܕ :/ { v } z C ( 〜 ҆ Uj1 jƖ 〜)y [ x JW +/n q 9)eɽɽ %Pfg f s+ I޽;I l2 s -R u9 b }  H d B v R 2 Kr h u v 8 y U | ^O T ' : I* R! r % Z $_ L ʴVd W U ' tk 2 \XA5sΫGL0問:0O | MWĴܼç U】FŹǂUO֝ ά OW z k N「 1F 」ls {r ? @ /v ZSw1i ? 8-18] CAxN XW죙ۮ9 - ?!& CHN「RB N!&小時,����q�5���v&h,��� & KX \'7lF.-B �Ƃ�ğ'� ^Ajw�1�X0��X"�*��z�.�&"+|{��v/a+0�1o�i0G!l�~�o�+_�� �_��� 8�r|��F���k��!������}>��Ǟ7Xbb=�]�Rd��1��f�d�}�Nـ�k�ۉ���[5�k��6��y��I��jc�~/��˭N�ڍ�� �s�����4L�X0Ac��4L�X0����;�a�Ƃ &h,���Ƃ%q ,Nh,�Ƃ1���=�V�h,���,|?C L,�Ƃn�pϮs<&��ơ"��bq2�tX��w�0��h��bb�^����4�¿�+���; �p1�\�_����ܶ�\o�Z�$����Yxz˟Q�O:��「8 OV | 78 w ^ԸZX(對\ =?y a: N 4 {〜b [S $ U ᡷ ᡷ ֩ ֩ ֩ ֩ ֩ ֩ ֩ ֩ ֩ ֩ ֩ ֩ ֩ ֩ ֩ ֩ ֩ ֩ ֩ ֩ ֩ ֩ ֩ ֩ ֩ ֩ ֩ | } CBf「 K $$ { 3 E^ vMϨc$ڻ f Pu+W + ; { L 6Dލ w G J T c rl n_J E] | m } >an> IEND B`

但是,我曾經嘗試過的第三個腳本仍然有效:

// read the post data 
    $data = array('100','200','300','400','500','350','270'); 
    $x_fld = array('Sun','Mon','Tue','Wen','Thu','Fir','Sat'); 
    $max = 0; 
    for ($i=0;$i<7;$i++){ 
     if ($data[$i] > $max)$max=$data[$i]; // find the largest data 
    } 
    $im = imagecreate(320,255); // width , height px 

    $white = imagecolorallocate($im,255,255,255); // allocate some color from RGB components remeber Physics 
    $black = imagecolorallocate($im,0,0,0); // 
    $red = imagecolorallocate($im,255,0,0); // 
    $green = imagecolorallocate($im,0,255,0); // 
    $blue = imagecolorallocate($im,0,0,255); // 
    // 
    // create background box 
    //imagerectangle($im, 1, 1, 319, 239, $black); 
    //draw X, Y Co-Ordinate 
    imageline($im, 10, 5, 10, 230, $blue); 
    imageline($im, 10, 230, 300, 230, $blue); 
    //Print X, Y 
    imagestring($im,3,15,5,"Students",$black); 
    imagestring($im,3,280,240,"Days",$black); 
    imagestring($im,5,100,50,"Simple Graph",$red); 
    imagestring($im,5,125,75,"by Vijit",$green); 

    // what next draw the bars 
    $x = 15; // bar x1 position 
    $y = 230; // bar $y1 position 
    $x_width = 20; // width of bars 
    $y_ht = 0; // height of bars, will be calculated later 
    // get into some meat now, cheese for vegetarians; 
    for ($i=0;$i<7;$i++){ 
     $y_ht = ($data[$i]/$max)* 100; // no validation so check if $max = 0 later; 
     imagerectangle($im,$x,$y,$x+$x_width,($y-$y_ht),$red); 
     imagestring($im,2,$x-1,$y+1,$x_fld[$i],$black); 
     imagestring($im,2,$x-1,$y+10,$data[$i],$black); 
     $x += ($x_width+20); // 20 is diff between two bars; 

    } 
    imagejpeg($im, "graph.jpeg", 90); 
    imagedestroy($im); 
    echo "<img src='graph.jpeg'><p></p>"; 

Source

看來,事實上,它不輸出頭就是爲什麼它的工作原理,但爲什麼別人用來工作,現在不是bey尤其是因爲這些錯誤也在一個不相關的遠程主機上覆制,我是不是很笨,並且錯誤地調用腳本?在沒有人詢問的時候,是的,我確信GD已經完全啓用,這裏是相關的規範從的phpinfo:

GD支持:啓用
GD版本:捆綁(2.0.34兼容)
FreeType的支持:啓用
FreeType的聯動:對於FreeType
FreeType的版本:2.1.9
T1Lib支持:啓用
GIF閱讀支持:啓用
GIF創造支持:啓用
JPG支持:啓用
PNG支持:啓用
WBMP支持:啓用
XBM支持:啓用

有人可以請大家指教這個糊塗的女孩?

回答

4

的原因很簡單(除了關於imagecolordeallocate的警告() )。

您需要編碼並保存腳本文件爲UTF-8 withuot BOMASCII。它目前保存爲UTF-8,由於額外的BOM字符,導致問題

UTF-8編碼頁面中的BOM字符會將輸出作爲第一個字符發送出來,從而混淆輸出。材料清單使用是可選的,如果使用,它會出現在文本流的開始處。

使用任何高級文本編輯器或IDE(如Notepad++)對腳本文件進行編碼並保存。

+0

您是對的,我將腳本的編碼更改爲UTF-8而不使用BOM,它們都完美無缺地工作。再次感謝! – 2010-09-16 19:20:34

+0

不客氣。 – shamittomar 2010-09-16 19:23:19

1

你的文件中是否有空白(可能在<?php ... ?>標籤之外)?任何流浪的空白將被髮送到客戶端,之後不能再發送標頭。根據錯誤消息中的行號,在打開<?php之前可能有空白,因此請確保它是腳本中的第一件事。

此外,從您的錯誤消息,你可以看到你打電話imagecolordeallocate與錯誤的參數數量。第一個參數應該是你的圖像處理,所以正確的通話將

imagecolordeallocate($my_img, $line_color); 
imagecolordeallocate($my_img, $text_color); 
imagecolordeallocate($my_img, $background); 

被輸出的錯誤信息也將被髮送到這將防止頭部被設置客戶端。

1

這不是標題問題。
imagecolordeallocate()導致整個爛攤子的參數數量錯誤
雖然這是一個簡單明瞭的例子。

+0

第一個代碼塊有參數計數問題,第二個代碼塊沒有那個錯誤 - 不是全部問題。 – Rudu 2010-09-16 15:28:30

1

您可能希望在打開PHP標記之前檢查是否有空格,因爲這會將服務器置於text/html模式。

編輯:啊,是的,從頭開始。這就是Shrapnel上校所說的。該錯誤是強制頁面變爲text/html。

0

由於錯誤說,有些東西正從文件H輸出:\ XAMPP \ htdocs中\上線測試\ script.php的1個

0

你的問題是文件夾 的路徑形象的比方:barla創建一個文件夾

改變你的頭 標題(「內容類型:barla /圖像/ PNG」)之後;