2012-08-11 19 views
1

我寫了這個函數從文本創建PNG文件巴布亞新幾內亞:PHP:生成從文字上飛

function pngfromtext($text){ 
    $fontsize = 5; 
    $width = imagefontwidth($fontsize)* strlen($text); 
    $height = imagefontheight($fontsize); 

    $img = imagecreate($width, $height); 

    // Transparent background 
    $black = imagecolorallocate($img, 0, 0, 0); 
    imagecolortransparent($img, $black); 

    // Red text 
    $red = imagecolorallocate($img, 255, 255, 255); 
    imagestring($img, $fontsize, 0, 0, $text, $red); 

    header('Content-type: image/png'); 
    imagepng($img); 
    imagedestroy($img); 
} 

我把代碼functions.php文件,當使用該功能在另一個頁面我得到這個錯誤:

Warning: Cannot modify header information - headers already sent by (output started at ..\functions.php on line 58 
�PNG IHDRZ^%JPLTE����ٟ�[email protected]��f�IDAT�c` Hȱ�7�H��'��`c��s�����i��$���Hl`8��Ɛ�� ��#�c��p�� q�3f�òm�� �g�ـ�6fF ���h�bc�sXd4c�A4����?|�¦����r+���!IEND�B`� 

出了什麼問題?

+1

確保您在設置標頭之前不輸出任何內容(echo/var_dump等) – 2012-08-11 14:15:38

+2

您可能在''標籤之外的某處存在空格,或者可能會在某處生成警告/通知。在函數.php的第58行顯示代碼,如果沒有幫助,請觀察[Fiddler](http://www.fiddler2.com/fiddler2/)中的請求/響應,以查看在PNG標題。 – DCoder 2012-08-11 14:15:52

+0

@Traveling Tech Guy沒有任何輸出 – Nulled 2012-08-11 14:31:37

回答

1

您可以在網頁上不使用多個標頭中的標頭。

2

將標題設置在您知道輸出將成爲圖像的位置。這意味着設置此聲明

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

在您的PHP腳本的開始。

這裏還有一個可能性,就是在這個點之前header-command已經被執行了。

+0

它是一個函數,我不能使用腳本頂部的標題 – Nulled 2012-08-11 14:33:31

0

header('Content-type: image/png');之前把ob_clean(); ,清理響應對象,所以你可以添加再次

+1

可能是一個非常骯髒的解決方案,因爲我們不知道他的函數之前發生了什麼。也可以有一個框架,其中設置某種形式的複雜的標題... – 2012-08-11 14:53:18

+0

我知道,但如果它使用框架它**真的很難解決它,所以這是快速和骯髒的方式,是的 – EaterOfCode 2012-08-11 14:56:23

+1

這取決於框架。這個答案的問題是它只修復了症狀,而不是代碼中的錯誤。 – Maerlyn 2012-08-11 15:03:04