Rumah >pembangunan bahagian belakang >masalah PHP >Apakah yang perlu saya lakukan jika kod pengesahan php tidak boleh dijana di latar belakang?
Penyelesaian kepada masalah bahawa kod pengesahan PHP tidak boleh dijana di latar belakang: 1. Tambah pernyataan "header('Content-type: image/png')" 2. Kosongkan cache output melalui "; ob_clean();".
Persekitaran pengendalian artikel ini: sistem windows7, versi PHP7.1, komputer DELL G3
Apakah yang perlu saya lakukan jika latar belakang kod pengesahan php tidak boleh dihasilkan?
Kod pengesahan PHP tidak boleh menjana imej, sebabnya diselesaikan:
Apabila menjana imej, pengepala('Content-type: image/png'); ! ! !
Atau, tambah: ob_clean(); Walaupun anda menggunakan output, anda boleh menggunakan ayat ini untuk mengosongkan cache output! sangat penting! ! !
Sudah tentu, anda mesti membuka perpustakaan gd2 dahulu, yang boleh dilihat melalui phpinfo. Selepas mengosongkan BOM, kod juga ditulis bermula dari baris atas, jadi masalah mungkin berlaku dalam kod. Selepas beberapa penyelidikan, saya mendapati bahawa saya masih perlu menukar program dan menambah pernyataan ob_clean() di hadapan pengepala, supaya ia boleh dijalankan! Haha, program pengekodan dan penyahpepijatan adalah seperti seorang doktor, anda akan menjadi kuat dengan latihan.
<?php //设置 验证码高度宽度\上面字符个数 $img_w = 70; $img_h = 22; $font = 5; $char_len = 5; //数组合并, range()函数返回一个范围数组 $char = array_merge ( range ( 'a', 'z' ), range ( 'A', 'Z' ), range ( '1', '9' ) ); $rand_keys = array_rand ( $char, $char_len ); //随机从数组中取指定个数的元素,生成键值 if ($char_len == 1) { //若只有一个数,则array_rand()返回非数组类型 $rand_keys = array ($rand_keys ); } shuffle($rand_keys); //可以不用 $code = ''; foreach ( $rand_keys as $k ) { $code .= $char [$k]; } session_start (); $_SESSION ['captcha'] = $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 );
Tetapkan warna rentetan
$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 'ddd'; //输出影响生成图片,查找了大半天的原因终于找到了 ob_clean(); //也可以加上这句,这样前面有输出,清除输出缓存 //生成图片 header ( 'Content-Type: image/png' );//header前不能加任何输出或加ob_clean()清除 imagepng($img); //----4 销毁画布 imagedestroy($img);
Pembelajaran yang disyorkan: "Tutorial Video PHP"
Atas ialah kandungan terperinci Apakah yang perlu saya lakukan jika kod pengesahan php tidak boleh dijana di latar belakang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!