Heim  >  Artikel  >  Backend-Entwicklung  >  Was soll ich tun, wenn der PHP-Bestätigungscode nicht im Hintergrund generiert werden kann?

Was soll ich tun, wenn der PHP-Bestätigungscode nicht im Hintergrund generiert werden kann?

藏色散人
藏色散人Original
2021-11-19 09:28:461940Durchsuche

Lösung für das Problem, dass der PHP-Bestätigungscode nicht im Hintergrund generiert werden kann: 1. Fügen Sie die Anweisung „header('Content-type: image/png')“ hinzu. 2. Löschen Sie den Ausgabecache über „ob_clean(); ".

Was soll ich tun, wenn der PHP-Bestätigungscode nicht im Hintergrund generiert werden kann?

Die Betriebsumgebung dieses Artikels: Windows7-System, PHP7.1-Version, DELL G3-Computer

Was soll ich tun, wenn der PHP-Bestätigungscode nicht im Hintergrund generiert werden kann?

PHP-Bestätigungscode kann keine Bilder generieren, der Grund ist gelöst:

Beim Generieren von Bildern darf header('Content-type: image/png'); keine Ausgabe davor haben! ! !

Oder fügen Sie hinzu: ob_clean(); Auch wenn Sie die Ausgabe verwenden, können Sie den Ausgabecache mit diesem Satz leeren! Sehr wichtig! ! !

Natürlich müssen Sie zuerst die gd2-Bibliothek öffnen, die über phpinfo angezeigt werden kann. Nach dem Löschen der Stückliste wird der Code auch ab der obersten Zeile geschrieben, sodass das Problem möglicherweise im Code auftritt. Nach einigen Recherchen habe ich herausgefunden, dass ich das Programm noch ändern und die ob_clean()-Anweisung vor dem Header hinzufügen muss, damit es ausgeführt werden kann! Haha, das Codieren und Debuggen von Programmen ist wie ein Arzt zu sein, man wird durch Übung stark.

<?php
//设置 验证码高度宽度\上面字符个数
$img_w = 70;
$img_h = 22;
$font = 5;
$char_len = 5;
//数组合并, range()函数返回一个范围数组
$char = array_merge ( range ( &#39;a&#39;, &#39;z&#39; ), range ( &#39;A&#39;, &#39;Z&#39; ), range ( &#39;1&#39;, &#39;9&#39; ) );
$rand_keys = array_rand ( $char, $char_len ); //随机从数组中取指定个数的元素,生成键值
if ($char_len == 1) { //若只有一个数,则array_rand()返回非数组类型
         $rand_keys = array ($rand_keys );
}
shuffle($rand_keys);  //可以不用
$code = &#39;&#39;;
foreach ( $rand_keys as $k ) {
         $code .= $char [$k];
}
session_start ();
$_SESSION [&#39;captcha&#39;] = $code;
 
//添加线、色
//创建新图像
$img = imagecreatetruecolor ( $img_w, $img_h );
//分配颜色
$bg_color = imagecolorallocate ( $img, 0xcc, 0xcc, 0xcc );
//画布背景色
imagefill ( $img, 0, 0, $bg_color );
//干扰线
for($i = 0; $i < 300; ++$i) {
         $color = imagecolorallocate ( $img, mt_rand ( 0, 255 ), mt_rand ( 0, 255 ), mt_rand ( 0, 255 ) );
         imagesetpixel ( $img, mt_rand ( 0, $img_w ), mt_rand ( 0, $img_h ), $color );
}
for($i = 0; $i <= 10; ++ $i) {
         //设置直线颜色
         $color = imageColorAllocate ( $img, mt_rand ( 0, 255 ), mt_rand ( 0, 255 ), mt_rand ( 0, 255 ) );
         //在$img图像上随机画一条直线
         imageline ( $img, mt_rand ( 0, $img_w ), mt_rand ( 0, $img_h ), mt_rand ( 0, $img_w ), mt_rand ( 0, $img_h ), $color );
         //imagesetpixel($img,mt_rand(0,$img_w),mt_rand(0,$img_h),$color);
}
 
//加加框
$rect_color = imagecolorallocate ( $img, 0x90, 0x90, 0x90 );
imagerectangle ( $img, 0, 0, $img_w - 1, $img_h - 1, $rect_color );
$str_color = imagecolorallocate ( $img, mt_rand ( 0, 100 ), mt_rand ( 0, 100 ), mt_rand ( 0, 100 ) );
$font_w = imagefontwidth ( $font );
$font_h = imagefontheight ( $font );
$str_len = $font_w * $char_len;
imagestring ( $img, $font, ($img_w - $str_len) / 2, ($img_h - $font_h) / 2, $code, $str_color );

String-Farbe festlegen

$str_color = imageColorAllocate($img, mt_rand(0, 100), mt_rand(0, 100),mt_rand(0, 100));
//设定字符串位置
$font_w = imageFontWidth($font);  //字体宽
$font_h = imageFontHeight($font); //字体高
$str_w = $font_w * $char_len;     //字符串宽
imageString($img, $font, ($img_w-$str_w)/2, ($img_h-$font_h)/2, $code, $str_color);
echo &#39;ddd&#39;; //输出影响生成图片,查找了大半天的原因终于找到了
ob_clean(); //也可以加上这句,这样前面有输出,清除输出缓存
//生成图片
header ( &#39;Content-Type: image/png&#39; );//header前不能加任何输出或加ob_clean()清除
imagepng($img);
//----4 销毁画布
imagedestroy($img);

Empfohlenes Lernen: „PHP-Video-Tutorial

Das obige ist der detaillierte Inhalt vonWas soll ich tun, wenn der PHP-Bestätigungscode nicht im Hintergrund generiert werden kann?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn