phpは動的ランダム検証コード機構(CAPTCHA)を実装しており、検証コードcaptcha
phpは動的ランダム検証コード機構を実装しています
検証コード(CAPTCHA)は「コンピュータと人間を区別するための完全に自動化された公開チューリングテスト」です(全自動、コンピュータと人間を区別するためのチューリング テストの略語) は、ユーザーがコンピュータであるか人間であるかを区別するための公開された完全に自動化された手順です。これにより、悪意のあるパスワードのクラッキング、チケット詐欺、フォーラムのフラッディングが防止され、ハッカーが特定のプログラムを使用して特定の登録ユーザーが継続的にログイン試行することを効果的に阻止できます。実際、確認コードの使用は、多くのユーザーにとって一般的な方法です。この機能は比較的簡単な方法で実装されています。
この質問はコンピューターによって生成および判断できますが、回答できるのは人間のみです。コンピュータは CAPTCHA の質問に答えることができないため、質問に答えるユーザーは人間であると考えられます。アニメーション制作 PHP 制作の動的検証コードは PHP 画像処理をベースにしています。 まずは PHP の画像処理について紹介します。
1. PHP 画像処理の概要
PHP5 では、動的画像の処理が以前よりもはるかに簡単になりました。 PHP5 には、php.ini ファイルに GD 拡張機能パッケージが含まれています。通常に使用するには、GD 拡張機能パッケージの対応するコメントを削除するだけで済みます。 PHP5 に含まれる GD ライブラリは、アップグレードされた GD2 ライブラリであり、トゥルー カラー画像処理をサポートするいくつかの便利な JPG 関数が含まれています。
一般に生成されたグラフィックスは PHP のドキュメント形式で保存されますが、動的なグラフィックスは HTML の画像挿入メソッド SRC を通じて直接取得できます。たとえば、確認コード、ウォーターマーク、サムネイルなどです。画像を作成する一般的なプロセス:
<p><strong>1).设定标头,告诉浏览器你要生成的MIME类型。</strong></p> <p><strong>2).创建一个图像区域,以后的操作都将基于此图像区域。</strong></p> <p><strong>3).在空白图像区域绘制填充背景。</strong></p> <p><strong>4).在背景上绘制图形轮廓输入文本。</strong></p> <p><strong>5).输出最终图形。</strong></p> <p><strong>6).清除所有资源。</strong></p> <p><strong>7).其他页面调用图像。</strong></p>
最初のステップ、ファイルの MIME タイプ、出力タイプを設定して、出力タイプを画像ストリームに変更します
<p>header('Content-Type: image/png;');</p>
一般的に生成される画像は、PNG、JPEG、GIF、WBMP です
2 2 番目のステップ、グラフィックス領域、画像の背景を作成します
imagecreatetruecolor()
サイズがx_size
と y_size
の黒色の画像を表す画像識別子を返します。 構文: resource imagecreatetruecolor ( int $width
, int $height
)x_size
和 y_size
的黑色图像。语法:resource imagecreatetruecolor ( int $width
, int $height
)
<p>$im = imagecreatetruecolor(200,200);</p>
第三步,在空白图像区域绘制填充背景
要有颜色填充器;imagecolorallocate -- 为一幅图像分配颜色;语法:int imagecolorallocate ( resource $image
, int $red
, int $green
, int $blue
)
<p>$blue = imagecolorallocate($im,0,102,255);</p>
将这个blue颜色填充到背景上去;imagefill -- 区域填充;语法:bool imagefill ( resource $image
, int $x
, int $y
, int $color
)
<p>imagefill($im,0,0,$blue);</p>
第四步,在蓝色的背景上输入一些线条,文字等
颜色填充器
<p>$white = imagecolorallocate($im,255,255,255);</p>
画两条线段:imageline
imageline() 用 color
颜色在图像 image
中从坐标 x1
,y1
到 x2
,y2
(图像左上角为 0, 0)画一条线段。语法:bool imageline ( resource $image
, int $x1
, int $y1
, int $x2
, int $y2
, int $color
)
<p>imageline($im,0,0,200,200,$white);</p> <p>imageline($im,200,0,0,200,$white);</p>
水平地画一行字符串:imagestring
imagestring() 用 col
颜色将字符串 s
画到 image
所代表的图像的 x
,y
坐标处(这是字符串左上角坐标,整幅图像的左上角为 0,0)。如果font
是 1,2,3,4 或 5,则使用内置字体。语法:bool imagestring ( resource $image
, int $font
, int $x
, int $y
, string $s
, int $col
)
<p>imagestring($im,5,66,20,'jingwhale',$white);</p>
第五步,输出最终图形
imagepng() 将 GD 图像流(image
)以 PNG 格式输出到标准输出(通常为浏览器),或者如果用 filename
给出了文件名则将其输出到该文件。语法:bool imagepng ( resource $image
[, string $filename
] )
<p>imagepng($im);</p>
第六步,我要将所有的资源全部清空
imagedestroy() 释放与 image
关联的内存。语法:bool imagedestroy ( resource $image
<p>imagedestroy($im);</p>
カラーフィラーが必要です。imagecolorallocate -- 画像に色を割り当てます。
構文: int
imagecolorallocate ( resource $image
, int $red
) code >$green, int $blue
)
<p><img src="/static/imghwm/default1.png" data-src="Demo4.php" class="lazy" alt="PHP は動的ランダム検証コード メカニズム (CAPTCHA) を実装し、検証コード captcha_PHP チュートリアル" /></p>
この青色を背景に塗りつぶします -- 領域の塗りつぶし
構文: boolimagefill ( resource $image 、 int $x
、 int $y
、 int $color
)
<?<span>php </span><span>//</span><span>第一步,设置文件MIME类型</span> <span>header</span>('Content-Type: image/png;'<span>); </span><span>//</span><span>第二步,创建一个图形区域,图像背景</span> <span>$im</span> = imagecreatetruecolor(200,200<span>); </span><span>//</span><span>第三步,在空白图像区域绘制填充背景</span> <span>$blue</span> = imagecolorallocate(<span>$im</span>,0,102,255<span>); imagefill(</span><span>$im</span>,0,0,<span>$blue</span><span>); </span><span>//</span><span>第四步,在蓝色的背景上输入一些线条,文字等</span> <span>$white</span> = imagecolorallocate(<span>$im</span>,255,255,255<span>); imageline(</span><span>$im</span>,0,0,200,200,<span>$white</span><span>); imageline(</span><span>$im</span>,200,0,0,200,<span>$white</span><span>); imagestring(</span><span>$im</span>,5,66,20,'Jing.Whale',<span>$white</span><span>); </span><span>//</span><span>第五步,输出最终图形</span> imagepng(<span>$im</span><span>); </span><span>//</span><span>第六步,我要将所有的资源全部清空</span> imagedestroy(<span>$im</span><span>); </span>?>ステップ 4 、青色の背景に線やテキストなどを入力します🎜 🎜🎜カラーフィラー🎜🎜
<span>for</span> (<span>$i</span>=0;<span>$i</span><<span>$_rnd_code</span>;<span>$i</span>++<span>) { </span><span>$_nmsg</span> .= <span>dechex</span>(<span>mt_rand</span>(0,15<span>)); }</span>🎜2つの線分を描画します: imageline🎜 🎜🎜🎜imageline()🎜
color
を使用して画像に色を付けますimage の座標 x1
、y1
から x2
、y2
(左上隅)画像の値が 0, 0) 線分を描きます。 🎜構文: bool 🎜imageline🎜 ( resource $image
、 int $x1
、 int $y1
、 int $x2
> , int $y2
, int $color
)🎜🎜🎜 <span>$_SESSION</span>['code'] = <span>$_nms</span>🎜文字列を水平方向に描画します: imagestring🎜 🎜🎜🎜imagestring()🎜
col を使用します
Color は、文字列 s
を、image
で表される画像の x
、y
座標に描画します (これは文字列の左上隅の座標であり、画像全体の左上隅は 0,0)。 font
が 1、2、3、4、または 5 の場合、組み込みフォントが使用されます。 🎜構文: bool 🎜imagestring🎜 ( resource $image
、 int $font
、 int $x
、 int $y
> , string $s
, int $col
)🎜🎜🎜 <span>//</span><span>创建一张图像</span> <span>$_img</span> = imagecreatetruecolor(<span>$_width</span>,<span>$_height</span><span>); </span><span>//</span><span>白色</span> <span>$_white</span> = imagecolorallocate(<span>$_img</span>,255,255,255<span>); </span><span>//</span><span>填充</span> imagefill(<span>$_img</span>,0,0,<span>$_white</span><span>); </span><span>if</span> (<span>$_flag</span><span>) { </span><span>//</span><span>黑色,边框</span> <span>$_black</span> = imagecolorallocate(<span>$_img</span>,0,0,0<span>); imagerectangle(</span><span>$_img</span>,0,0,<span>$_width</span>-1,<span>$_height</span>-1,<span>$_black</span><span>); }</span>🎜5 番目のステップ、最終グラフィックを出力します🎜 🎜🎜🎜imagepng()🎜 GD 画像をストリーミングします ( image) を標準出力 (通常はブラウザ) に PNG 形式で出力するか、ファイル名が
filename
で指定されている場合はファイルに出力します。 🎜構文: bool 🎜imagepng🎜 ( resource $image
[, string $filename
] )🎜🎜🎜 <span>//</span><span>随机画出6个线条</span> <span>for</span> (<span>$i</span>=0;<span>$i</span><6;<span>$i</span>++<span>) { </span><span> $_rnd_color</span> = imagecolorallocate(<span>$_img</span>,<span>mt_rand</span>(0,255),<span>mt_rand</span>(0,255),<span>mt_rand</span>(0,255<span>)); imageline(</span><span>$_img</span>,<span>mt_rand</span>(0,<span>$_width</span>),<span>mt_rand</span>(0,<span>$_height</span>),<span>mt_rand</span>(0,<span>$_width</span>),<span>mt_rand</span>(0,<span>$_height</span>),<span>$_rnd_color</span><span>); } </span><span>//随机</span><span>雪花</span> <span>for</span> (<span>$i</span>=0;<span>$i</span><100;<span>$i</span>++<span>) { </span><span>$_rnd_color</span> = imagecolorallocate(<span>$_img</span>,<span>mt_rand</span>(200,255),<span>mt_rand</span>(200,255),<span>mt_rand</span>(200,255<span>)); imagestring(</span><span>$_img</span>,1,<span>mt_rand</span>(1,<span>$_width</span>),<span>mt_rand</span>(1,<span>$_height</span>),'*',<span>$_rnd_color</span><span>); }</span>🎜6 番目のステップ、すべてのリソースをクリアしたいです🎜 🎜🎜 🎜imagedestroy()🎜
image
に関連付けられたメモリを解放します。 🎜構文: bool 🎜imagedestroy🎜 ( resource $image
)🎜🎜🎜 <span>//</span><span>输出验证码</span> <span>for</span> (<span>$i</span>=0;<span>$i</span><<span>strlen</span>(<span>$_SESSION</span>['code']);<span>$i</span>++<span>) { </span><span>$_rnd_color</span> = imagecolorallocate(<span>$_img</span>,<span>mt_rand</span>(0,100),<span>mt_rand</span>(0,150),<span>mt_rand</span>(0,200<span>)); imagestring(</span><span>$_img</span>,5,<span>$i</span>*<span>$_width</span>/<span>$_rnd_code</span>+<span>mt_rand</span>(1,10),<span>mt_rand</span>(1,<span>$_height</span>/2),<span>$_SESSION</span>['code'][<span>$i</span>],<span>$_rnd_color</span><span>); } </span><span>//</span><span>输出图像</span> <span>header</span>('Content-Type: image/png'<span>); imagepng(</span><span>$_img</span><span>); </span><span>//</span><span>销毁</span> imagedestroy(<span>$_img</span>);🎜他のページ (html) で作成されたグラフィックを呼び出す 🎜
<p>* @param <strong>int $_width</strong> 验证码的长度:如果要6位长度推荐75+50;如果要8位,推荐75+50+50,依次类推<br>* @param <strong>int $_height</strong> 验证码的高度<br>* @param <strong>int $_rnd_code</strong> 验证码的位数<br>* @param <strong>bool $_flag</strong> 验证码是否需要边框:true有边框, false无边框(默认)</p>🎜 サンプルコードは次のとおりです: 🎜
<?<span>php </span><span>/*</span><span>* * [verification-code] (C)2015-2100 jingwhale. * * This is a freeware * $Id: global.func.php 2015-02-05 20:53:56 jingwhale$ </span><span>*/</span>🎜表示効果: 🎜 🎜🎜🎜 🎜 🎜 🎜2. 動的検証コードを作成する🎜 🎜🎜添付: コードソースアドレス🎜🎜https://github.com/cnblogs-/php-captcha🎜🎜
1. 创建带验证码的图片,并模糊背景
随机码采用16进制;模糊背景即在图片背景加上线条、雪花等。
1)创建随机码
<span>for</span> (<span>$i</span>=0;<span>$i</span><<span>$_rnd_code</span>;<span>$i</span>++<span>) { </span><span>$_nmsg</span> .= <span>dechex</span>(<span>mt_rand</span>(0,15<span>)); }</span>
string dechex ( int $number
),返回一字符串,包含有给定 number
参数的十六进制表示。
2)保存在session
<span>$_SESSION</span>['code'] = <span>$_nms</span>
3)创建图片
<span>//</span><span>创建一张图像</span> <span>$_img</span> = imagecreatetruecolor(<span>$_width</span>,<span>$_height</span><span>); </span><span>//</span><span>白色</span> <span>$_white</span> = imagecolorallocate(<span>$_img</span>,255,255,255<span>); </span><span>//</span><span>填充</span> imagefill(<span>$_img</span>,0,0,<span>$_white</span><span>); </span><span>if</span> (<span>$_flag</span><span>) { </span><span>//</span><span>黑色,边框</span> <span>$_black</span> = imagecolorallocate(<span>$_img</span>,0,0,0<span>); imagerectangle(</span><span>$_img</span>,0,0,<span>$_width</span>-1,<span>$_height</span>-1,<span>$_black</span><span>); }</span>
4)模糊背景
<span>//</span><span>随机画出6个线条</span> <span>for</span> (<span>$i</span>=0;<span>$i</span><6;<span>$i</span>++<span>) { </span><span> $_rnd_color</span> = imagecolorallocate(<span>$_img</span>,<span>mt_rand</span>(0,255),<span>mt_rand</span>(0,255),<span>mt_rand</span>(0,255<span>)); imageline(</span><span>$_img</span>,<span>mt_rand</span>(0,<span>$_width</span>),<span>mt_rand</span>(0,<span>$_height</span>),<span>mt_rand</span>(0,<span>$_width</span>),<span>mt_rand</span>(0,<span>$_height</span>),<span>$_rnd_color</span><span>); } </span><span>//随机</span><span>雪花</span> <span>for</span> (<span>$i</span>=0;<span>$i</span><100;<span>$i</span>++<span>) { </span><span>$_rnd_color</span> = imagecolorallocate(<span>$_img</span>,<span>mt_rand</span>(200,255),<span>mt_rand</span>(200,255),<span>mt_rand</span>(200,255<span>)); imagestring(</span><span>$_img</span>,1,<span>mt_rand</span>(1,<span>$_width</span>),<span>mt_rand</span>(1,<span>$_height</span>),'*',<span>$_rnd_color</span><span>); }</span>
5)输出及销毁
<span>//</span><span>输出验证码</span> <span>for</span> (<span>$i</span>=0;<span>$i</span><<span>strlen</span>(<span>$_SESSION</span>['code']);<span>$i</span>++<span>) { </span><span>$_rnd_color</span> = imagecolorallocate(<span>$_img</span>,<span>mt_rand</span>(0,100),<span>mt_rand</span>(0,150),<span>mt_rand</span>(0,200<span>)); imagestring(</span><span>$_img</span>,5,<span>$i</span>*<span>$_width</span>/<span>$_rnd_code</span>+<span>mt_rand</span>(1,10),<span>mt_rand</span>(1,<span>$_height</span>/2),<span>$_SESSION</span>['code'][<span>$i</span>],<span>$_rnd_color</span><span>); } </span><span>//</span><span>输出图像</span> <span>header</span>('Content-Type: image/png'<span>); imagepng(</span><span>$_img</span><span>); </span><span>//</span><span>销毁</span> imagedestroy(<span>$_img</span>);
将其封装在global.func.php全局函数库中,函数名为_code(),以便调用。我们将设置$_width ,$_height ,$_rnd_code,$_flag 四个参数,以增强函数的灵活性。
<p>* @param <strong>int $_width</strong> 验证码的长度:如果要6位长度推荐75+50;如果要8位,推荐75+50+50,依次类推<br>* @param <strong>int $_height</strong> 验证码的高度<br>* @param <strong>int $_rnd_code</strong> 验证码的位数<br>* @param <strong>bool $_flag</strong> 验证码是否需要边框:true有边框, false无边框(默认)</p>
封装后的代码如下:
<?<span>php </span><span>/*</span><span>* * [verification-code] (C)2015-2100 jingwhale. * * This is a freeware * $Id: global.func.php 2015-02-05 20:53:56 jingwhale$ </span><span>*/</span>
<span>/*</span><span>* * _code()是验证码函数 * @access public * @param int $_width 验证码的长度:如果要6位长度推荐75+50;如果要8位,推荐75+50+50,依次类推 * @param int $_height 验证码的高度 * @param int $_rnd_code 验证码的位数 * @param bool $_flag 验证码是否需要边框:true有边框, false无边框(默认) * @return void 这个函数执行后产生一个验证码 </span><span>*/</span> <span>function</span> _code(<span>$_width</span> = 75,<span>$_height</span> = 25,<span>$_rnd_code</span> = 4,<span>$_flag</span> = <span>false</span><span>) { </span><span>//</span><span>创建随机码</span> <span>for</span> (<span>$i</span>=0;<span>$i</span><<span>$_rnd_code</span>;<span>$i</span>++<span>) { </span><span>$_nmsg</span> .= <span>dechex</span>(<span>mt_rand</span>(0,15<span>)); } </span><span>//</span><span>保存在session</span> <span>$_SESSION</span>['code'] = <span>$_nmsg</span><span>; </span><span>//</span><span>创建一张图像</span> <span>$_img</span> = imagecreatetruecolor(<span>$_width</span>,<span>$_height</span><span>); </span><span>//</span><span>白色</span> <span>$_white</span> = imagecolorallocate(<span>$_img</span>,255,255,255<span>); </span><span>//</span><span>填充</span> imagefill(<span>$_img</span>,0,0,<span>$_white</span><span>); </span><span>if</span> (<span>$_flag</span><span>) { </span><span>//</span><span>黑色,边框</span> <span>$_black</span> = imagecolorallocate(<span>$_img</span>,0,0,0<span>); imagerectangle(</span><span>$_img</span>,0,0,<span>$_width</span>-1,<span>$_height</span>-1,<span>$_black</span><span>); } </span><span>//</span><span>随即画出6个线条</span> <span>for</span> (<span>$i</span>=0;<span>$i</span><6;<span>$i</span>++<span>) { </span><span>$_rnd_color</span> = imagecolorallocate(<span>$_img</span>,<span>mt_rand</span>(0,255),<span>mt_rand</span>(0,255),<span>mt_rand</span>(0,255<span>)); imageline(</span><span>$_img</span>,<span>mt_rand</span>(0,<span>$_width</span>),<span>mt_rand</span>(0,<span>$_height</span>),<span>mt_rand</span>(0,<span>$_width</span>),<span>mt_rand</span>(0,<span>$_height</span>),<span>$_rnd_color</span><span>); } </span><span>//</span><span>随即雪花</span> <span>for</span> (<span>$i</span>=0;<span>$i</span><100;<span>$i</span>++<span>) { </span><span>$_rnd_color</span> = imagecolorallocate(<span>$_img</span>,<span>mt_rand</span>(200,255),<span>mt_rand</span>(200,255),<span>mt_rand</span>(200,255<span>)); imagestring(</span><span>$_img</span>,1,<span>mt_rand</span>(1,<span>$_width</span>),<span>mt_rand</span>(1,<span>$_height</span>),'*',<span>$_rnd_color</span><span>); } </span><span>//</span><span>输出验证码</span> <span>for</span> (<span>$i</span>=0;<span>$i</span><<span>strlen</span>(<span>$_SESSION</span>['code']);<span>$i</span>++<span>) { </span><span>$_rnd_color</span> = imagecolorallocate(<span>$_img</span>,<span>mt_rand</span>(0,100),<span>mt_rand</span>(0,150),<span>mt_rand</span>(0,200<span>)); imagestring(</span><span>$_img</span>,5,<span>$i</span>*<span>$_width</span>/<span>$_rnd_code</span>+<span>mt_rand</span>(1,10),<span>mt_rand</span>(1,<span>$_height</span>/2),<span>$_SESSION</span>['code'][<span>$i</span>],<span>$_rnd_color</span><span>); } </span><span>//</span><span>输出图像</span> <span>header</span>('Content-Type: image/png'<span>); imagepng(</span><span>$_img</span><span>); </span><span>//</span><span>销毁</span> imagedestroy(<span>$_img</span><span>); } </span>?>
2.创建验证机制
创建php验证页面,通过session来检验验证码是否一致。
1)创建verification-code.php验证页面
<?<span>php </span><span>/*</span><span>* * [verification-code] (C)2015-2100 jingwhale. * * This is a freeware * $Id: verification-code.php 2015-02-05 20:53:56 jingwhale$ </span><span>*/</span> <span>//</span><span>设置字符集编码</span> <span>header</span>('Content-Type: text/html; charset=utf-8'<span>); </span>?> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>verification code</title> <link rel="stylesheet" type="text/css" href="style/basic.css" /> </head> <body> <div id="testcode"> <form method="post" name="verification" action="verification-code.php?action=verification"> <<span>dl</span>> <dd>验证码:<input type="text" name="code" <span>class</span>="code" /><img src="/static/imghwm/default1.png" data-src="codeimg.php" class="lazy" id="codeimg" / alt="PHP は動的ランダム検証コード メカニズム (CAPTCHA) を実装し、検証コード captcha_PHP チュートリアル" ></dd> <dd><input type="submit" <span>class</span>="submit" value="验证" /></dd> </<span>dl</span>> </form> </div> </body> </html>
显示如下:
2)创建产生验证码图片页面
创建codeimg.php为verification-code.php html代码里的img提供验证码图片
首先必须在codeimg.php页面开启session;
其次,将我们封装好的global.func.php全局函数库引入进来;
最后,运行_code();
<?<span>php </span><span>/*</span><span>* * [verification-code] (C)2015-2100 jingwhale. * * This is a freeware * $Id: codeimg.php 2015-02-05 20:53:56 jingwhale$ </span><span>*/</span> <span>//</span><span>开启session</span> <span>session_start</span><span>(); </span><span>//</span><span>引入全局函数库(自定义)</span> <span>require</span> <span>dirname</span>(<span>__FILE__</span>).'/includes/global.func.php'<span>; </span><span>//</span><span>运行验证码函数。通过数据库的_code方法,设置验证码的各种属性,生成图片</span> _code(125,25,6,<span>false</span><span>); </span>?>
3)创建session检验机制
首先必须在verification-code.php页面也开启session;
其次,设计提交验证码的方式,本文以get方式提交,当action=verification时提交成功;
最后,创建验证函数,原理是将客户端用户提交的验证码同服务器codeimg.php中session的验证码是否一致;这里有一个js弹窗函数_alert_back(),我们也把它封装在global.func.php里;
修改verification-code.php中php代码如下:
<?<span>php </span><span>/*</span><span>* * [verification-code] (C)2015-2100 jingwhale. * * This is a freeware * $Id: verification-code.php 2015-02-05 20:53:56 jingwhale$ </span><span>*/</span> <span>//</span><span>设置字符集编码</span> <span>header</span>('Content-Type: text/html; charset=utf-8'<span>); </span><span>//</span><span>开启session</span> <span>session_start</span><span>(); </span><span>//</span><span>引入全局函数库(自定义)</span> <span>require</span> <span>dirname</span>(<span>__FILE__</span>).'/includes/global.func.php'<span>; </span><span>//</span><span>检验验证码</span> <span>if</span> (<span>$_GET</span>['action'] == 'verification'<span>) { </span><span>if</span> (!(<span>$_POST</span>['code'] == <span>$_SESSION</span>['code'<span>])) { _alert_back(</span>'验证码不正确!'<span>); }</span><span>else</span><span>{ _alert_back(</span>'验证码通过!'<span>); } } </span>?> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>verification code</title> <link rel="stylesheet" type="text/css" href="style/basic.css" /> <script type="text/javascript"></script> </head> <body> <div id="testcode"> <form method="post" name="verification" action="verification-code.php?action=verification"> <<span>dl</span>> <dd>验证码:<input type="text" name="code" <span>class</span>="code" /><img src="/static/imghwm/default1.png" data-src="codeimg.php" class="lazy" id="codeimg" / alt="PHP は動的ランダム検証コード メカニズム (CAPTCHA) を実装し、検証コード captcha_PHP チュートリアル" ></dd> <dd><input type="submit" <span>class</span>="submit" value="验证" /></dd> </<span>dl</span>> </form> </div> </body> </html>
3.实现点击验证码图片更新验证码
上面若想实现验证码更新,必须刷新页面;我们写一个codeimg.js函数实现点击验证码图片更新验证码
window.onload = <span>function</span><span> () { </span><span>var</span> code = document.getElementById('codeimg');<span>//</span><span>通过id找到html中img标签</span> code.onclick = <span>function</span> () {<span>//</span><span>为标签添加点击事件</span> <span>this</span>.src='codeimg.php?tm='+Math.random();<span>//</span><span>修改时间,重新指向codeimg.php</span> <span> }; }</span>
然后在verification-code.php html代码head里它即可。
完
欢迎转载。转载请注明转载字样,标注原作者和原博文地址。

PHPでは、特性は方法が必要な状況に適していますが、継承には適していません。 1)特性により、クラスの多重化方法が複数の継承の複雑さを回避できます。 2)特性を使用する場合、メソッドの競合に注意を払う必要があります。メソッドの競合は、代替およびキーワードとして解決できます。 3)パフォーマンスを最適化し、コードメンテナビリティを改善するために、特性の過剰使用を避け、その単一の責任を維持する必要があります。

依存関係噴射コンテナ(DIC)は、PHPプロジェクトで使用するオブジェクト依存関係を管理および提供するツールです。 DICの主な利点には、次のものが含まれます。1。デカップリング、コンポーネントの独立したもの、およびコードの保守とテストが簡単です。 2。柔軟性、依存関係を交換または変更しやすい。 3.テスト可能性、単体テストのために模擬オブジェクトを注入するのに便利です。

SplfixedArrayは、PHPの固定サイズの配列であり、高性能と低いメモリの使用が必要なシナリオに適しています。 1)動的調整によって引き起こされるオーバーヘッドを回避するために、作成時にサイズを指定する必要があります。 2)C言語アレイに基づいて、メモリと高速アクセス速度を直接動作させます。 3)大規模なデータ処理とメモリに敏感な環境に適していますが、サイズが固定されているため、注意して使用する必要があります。

PHPは、$ \ _ファイル変数を介してファイルのアップロードを処理します。セキュリティを確保するための方法には次のものが含まれます。1。アップロードエラー、2。ファイルの種類とサイズを確認する、3。ファイル上書きを防ぐ、4。ファイルを永続的なストレージの場所に移動します。

JavaScriptでは、nullcoalescingoperator(??)およびnullcoalescingsignmentoperator(?? =)を使用できます。 1.??最初の非潜水金または非未定されたオペランドを返します。 2.??これらの演算子は、コードロジックを簡素化し、読みやすさとパフォーマンスを向上させます。

XSS攻撃を防ぎ、リソースのロードを制限し、ウェブサイトのセキュリティを改善できるため、CSPは重要です。 1.CSPはHTTP応答ヘッダーの一部であり、厳格なポリシーを通じて悪意のある行動を制限します。 2。基本的な使用法は、同じ起源からのロードリソースのみを許可することです。 3.高度な使用法は、特定のドメイン名がスクリプトやスタイルをロードできるようにするなど、より微調整された戦略を設定できます。 4。CSPポリシーをデバッグおよび最適化するには、コンテンツセキュリティポリシーレポートのみのヘッダーを使用します。

HTTPリクエストメソッドには、それぞれリソースを取得、送信、更新、削除するために使用されるGET、POST、PUT、および削除が含まれます。 1. GETメソッドは、リソースを取得するために使用され、読み取り操作に適しています。 2. POSTメソッドはデータの送信に使用され、新しいリソースを作成するためによく使用されます。 3. PUTメソッドは、リソースの更新に使用され、完全な更新に適しています。 4.削除メソッドは、リソースの削除に使用され、削除操作に適しています。

HTTPSは、HTTPに基づいてセキュリティレイヤーを追加するプロトコルであり、主に暗号化されたデータを介してユーザーのプライバシーとデータセキュリティを保護します。その作業原則には、TLSの握手、証明書の確認、暗号化された通信が含まれます。 HTTPSを実装する場合、証明書管理、パフォーマンスへの影響、および混合コンテンツの問題に注意を払う必要があります。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

メモ帳++7.3.1
使いやすく無料のコードエディター

ドリームウィーバー CS6
ビジュアル Web 開発ツール

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ホットトピック



