PHP GD头问题

时间:2010-09-16 15:22:34

标签: php gd

几个月前,我在本地主机上启用了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

当时工作正常,现在当我运行时,我得到了这个:

警告:无法修改标头信息 - 第11行的H:\ xampp \ htdocs \ tests \ script.php中已经发送的标头(输出从H:\ xampp \ htdocs \ tests \ script.php:1开始) PNG IHDR P ! # PLTE M )B IDATH 1 0EA N :8QJNdZ ��! � ���k�Z⊜���k��g�˕��|K$�M��|)��$ů8DfRQB���-��[I��tźR�+���%�"��Ut)(�K�@dF�e�zKF9&�g|C7i��d��\G�Y � �3y�Ƌ�_�%�����IEND�B

警告:第13行的H:\ xampp \ htdocs \ tests \ script.php中imagecolordeallocate()的参数计数错误

警告:第14行的H:\ xampp \ htdocs \ tests \ script.php中imagecolordeallocate()的参数计数错误

警告:第15行的H:\ xampp \ htdocs \ tests \ script.php中imagecolordeallocate()的参数计数错误

我尝试的第二个脚本也是如此:

// 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

现在输出:

警告:无法修改标头信息 - 第22行的H:\ xampp \ htdocs \ tests \ script.php中已经发送的标头(输出从H:\ xampp \ htdocs \ tests \ script.php:1开始) PNG IHDR “:9 gIDATx v H a&lt; 4Ƹ ܕ :/ { v } zC循环(〜҆Uj1jƖ〜)Y [XJW + / nq9)eɽ?NQ%Pfgf s+ I޽;I l2s -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\ XA 5 s ΫGL0 Q :0O |M W j C U} FŹǂ UO ά OW z k N“ 1F ”ls {r ? @ /v ZSw1i ?i 8 ] C A xN?xw 죙9 - &amp; C h N “r !B ��j�Ǹ�_"ե>�Љ�u��q����9ɫ�T��5�s0*���*xݣ> �X!�w�����R�u �~�-O7�"�� <��·v���K��i�;�Dv��c��P�q��h,)~C��w��� 9版; N!&安培; H,����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}} ,|c ?L, �Ƃ1���=�V�h,���“ 8 Ov | 78 WԸZ X (p \ =  ?y a: N 4 {~b [S $ UO a = [ =֩ Z_6 w | } CBf“ K $$ { 3 E^ vMϨc$ڻ f Pu+W + ; { L 6Dލ w G ĴTcrln_JE] |米}的&GT;ԽIENDB`

但是,我尝试过的第三个脚本仍然有效:

�Ƃn�pϮs<&��ơ"��bq2�tX��w�0��h��bb�^����4�¿�+���; �p1�\�_����ܶ�\o�Z�$����Yxz˟Q�O:��

Source

似乎它没有输出标题的事实是它工作的原因,虽然为什么其他人曾经工作但现在不能超越我,特别是因为错误也在不相关的远程主机上复制,我只是无知并错误地调用脚本?在任何人问之前,是的,我确定GD已经完全启用,这里是来自phpinfo的相关规范:

GD支持:启用
GD版本:捆绑(2.0.34兼容)
FreeType支持:启用
FreeType链接:带有freetype
FreeType版本:2.1.9
T1Lib支持:启用
GIF阅读支持:启用
GIF创建支持:启用
JPG支持:启用
PNG支持:启用
WBMP支持:启用
XBM支持:已启用

有人可以指教这个迷茫的女孩吗?

6 个答案:

答案 0 :(得分:4)

原因很简单(除了关于imagecolordeallocate()的警告)。

您需要将脚本文件编码并保存为UTF-8 withuot BOMASCII。由于额外的BOM字符,它目前保存为UTF-8导致问题

UTF-8编码页面中的BOM字符会混淆输出,因为它是作为第一个字符发送的。 BOM使用是可选的,如果使用,它将出现在文本流的开头。

使用任何高级文本编辑器或类似Notepad++的IDE对脚本文件进行编码并保存。

答案 1 :(得分:1)

您的文件中是否有空格(可能在<?php ... ?>标记之外)?任何杂散的空格都将被发送到客户端,之后无法再发送标头。根据错误消息中的行号,在打开<?php之前可能有空格,因此请确保它是脚本中的第一个内容。

此外,根据您的错误消息,您可以看到您使用错误数量的参数调用imagecolordeallocate。第一个参数应该是你的图像句柄,所以正确的调用将是

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

输出的错误消息也将被发送到客户端,这将阻止设置标头。

答案 2 :(得分:1)

这不是标题问题 这是imagecolordeallocate()导致整个混乱的错误参数计数 虽然这个很简单明了。

答案 3 :(得分:1)

您可能希望在打开PHP标记之前检查没有空格,因为这会使服务器进入text / html模式。

编辑:啊,是的,划伤那个。这就是普拉特尔牧师所说的。错误是强制页面进入text / html。

答案 4 :(得分:0)

正如错误所说,有些事情是从第1行的文件H:\ xampp \ htdocs \ tests \ script.php获取输出

答案 5 :(得分:0)

您的问题是文件夹的路径  为图像创建一个文件夹,例如:barla

更改标题后 标题(&#34;内容类型:barla / image / png&#34;);