Maison > Article > développement back-end > PHP绘图函数生成图片验证码
PHP绘图函数生成图片验证码
<code><?php session_start(); <span>// Set some important CAPTCHA constants define(<span>'CAPTCHA_NUMCHARS'</span>, <span>6</span>); <span>// number of characters in pass-phrase</span> define(<span>'CAPTCHA_WIDTH'</span>, <span>100</span>); <span>// width of image</span> define(<span>'CAPTCHA_HEIGHT'</span>, <span>25</span>); <span>// height of image</span><span>// Generate the random pass-phrase</span><span>$pass_phrase</span> = <span>""</span>; <span>for</span> (<span>$i</span> = <span>0</span>; <span>$i</span> $i++) { <span>$pass_phrase</span> .= chr(<span>rand</span>(<span>97</span>, <span>122</span>)); } <span>// Store the encrypted pass-phrase in a session variable</span><span>$_SESSION</span>[<span>'pass_phrase'</span>] = SHA(<span>$pass_phrase</span>); <span>// Create the image</span><span>$img</span> = imagecreatetruecolor(CAPTCHA_WIDTH, CAPTCHA_HEIGHT); <span>// Set a white background with black text and gray graphics</span><span>$bg_color</span> = imagecolorallocate(<span>$img</span>, <span>255</span>, <span>255</span>, <span>255</span>); <span>// white</span><span>$text_color</span> = imagecolorallocate(<span>$img</span>, <span>0</span>, <span>0</span>, <span>0</span>); <span>// black</span><span>$graphic_color</span> = imagecolorallocate(<span>$img</span>, <span>64</span>, <span>64</span>, <span>64</span>); <span>// dark gray</span><span>// Fill the background</span> imagefilledrectangle(<span>$img</span>, <span>0</span>, <span>0</span>, CAPTCHA_WIDTH, CAPTCHA_HEIGHT, <span>$bg_color</span>); <span>// Draw some random lines</span><span>for</span> (<span>$i</span> = <span>0</span>; <span>$i</span> 5; <span>$i</span>++) { imageline(<span>$img</span>, <span>0</span>, <span>rand</span>() % CAPTCHA_HEIGHT, CAPTCHA_WIDTH, <span>rand</span>() % CAPTCHA_HEIGHT, <span>$graphic_color</span>); } <span>// Sprinkle in some random dots</span><span>for</span> (<span>$i</span> = <span>0</span>; <span>$i</span> 50; <span>$i</span>++) { imagesetpixel(<span>$img</span>, <span>rand</span>() % CAPTCHA_WIDTH, <span>rand</span>() % CAPTCHA_HEIGHT, <span>$graphic_color</span>); } <span>// Draw the pass-phrase string</span> imagettftext(<span>$img</span>, <span>18</span>, <span>0</span>, <span>5</span>, CAPTCHA_HEIGHT - <span>5</span>, <span>$text_color</span>, <span>'Courier New Bold.ttf'</span>, <span>$pass_phrase</span>); <span>// Output the image as a PNG using a header</span> header(<span>"Content-type: image/png"</span>); imagepng(<span>$img</span>); <span>// Clean up</span> imagedestroy(<span>$img</span>); ?></code>
在页面中使用这个生成验证码的脚本
<code><span><span><?php </span> session_start(); <span>?></span></span><span><span>html</span><span>xmlns</span>=<span>"http://www.w3.org/1999/xhtml"</span><span>xml:lang</span>=<span>"en"</span><span>lang</span>=<span>"en"</span>></span><span>head</span>></span><span>meta</span><span>http-equiv</span>=<span>"Content-Type"</span><span>content</span>=<span>"text/html; charset=utf-8"</span> /><span>title</span>>Guitar Wars - Add Your High Score<span><span>title</span>></span><span>link</span><span>rel</span>=<span>"stylesheet"</span><span>type</span>=<span>"text/css"</span><span>href</span>=<span>"style.css"</span> /><span><span>head</span>></span><span>body</span>><span>h2</span>>Guitar Wars - Add Your High Score<span><span>h2</span>></span><span><span><?php </span><span>require_once</span>(<span>'appvars.php'</span>); <span>require_once</span>(<span>'connectvars.php'</span>); <span>if</span> (<span>isset</span>(<span>$_POST</span>[<span>'submit'</span>])) { <span>// Connect to the database</span><span>$dbc</span> = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME); <span>// Grab the score data from the POST</span><span>$name</span> = mysqli_real_escape_string(<span>$dbc</span>, trim(<span>$_POST</span>[<span>'name'</span>])); <span>$score</span> = mysqli_real_escape_string(<span>$dbc</span>, trim(<span>$_POST</span>[<span>'score'</span>])); <span>$screenshot</span> = mysqli_real_escape_string(<span>$dbc</span>, trim(<span>$_FILES</span>[<span>'screenshot'</span>][<span>'name'</span>])); <span>$screenshot_type</span> = <span>$_FILES</span>[<span>'screenshot'</span>][<span>'type'</span>]; <span>$screenshot_size</span> = <span>$_FILES</span>[<span>'screenshot'</span>][<span>'size'</span>]; <span>// Check the CAPTCHA pass-phrase for verification</span><span>$user_pass_phrase</span> = SHA(<span>$_POST</span>[<span>'verify'</span>]); <span>if</span> (<span>$_SESSION</span>[<span>'pass_phrase'</span>] == <span>$user_pass_phrase</span>) { <span>if</span> (!<span>empty</span>(<span>$name</span>) && is_numeric(<span>$score</span>) && !<span>empty</span>(<span>$screenshot</span>)) { <span>if</span> (((<span>$screenshot_type</span> == <span>'image/gif'</span>) || (<span>$screenshot_type</span> == <span>'image/jpeg'</span>) || (<span>$screenshot_type</span> == <span>'image/pjpeg'</span>) || (<span>$screenshot_type</span> == <span>'image/png'</span>)) && (<span>$screenshot_size</span> > <span>0</span>) && (<span>$screenshot_size</span> if</span> (<span>$_FILES</span>[<span>'screenshot'</span>][<span>'error'</span>] == <span>0</span>) { <span>// Move the file to the target upload folder</span><span>$target</span> = GW_UPLOADPATH . <span>$screenshot</span>; <span>if</span> (move_uploaded_file(<span>$_FILES</span>[<span>'screenshot'</span>][<span>'tmp_name'</span>], <span>$target</span>)) { <span>// Write the data to the database</span><span>$query</span> = <span>"INSERT INTO guitarwars (date, name, score, screenshot) VALUES (NOW(), '$name', '$score', '$screenshot')"</span>; mysqli_query(<span>$dbc</span>, <span>$query</span>); <span>// Confirm success with the user</span><span>echo</span><span>'<p>Thanks for adding your new high score! It will be reviewed and added to the high score list as soon as possible.</p>'</span>; <span>echo</span><span>'<p><strong>Name:</strong> '</p></span> . <span>$name</span> . <span>'<br>'</span>; <span>echo</span><span>'<strong>Score:</strong> '</span> . <span>$score</span> . <span>'<br>'</span>; <span>echo</span><span>'<img src="'</span>%20.%20GW_UPLOADPATH%20.%20<span>%24screenshot</span>%20.%20<span>'" alt="PHP绘图函数生成图片验证码">'</span>; <span>echo</span><span>'<p><a href="index.php"><< Back to high scores</a></p>'</span>; <span>// Clear the score data to clear the form</span><span>$name</span> = <span>""</span>; <span>$score</span> = <span>""</span>; <span>$screenshot</span> = <span>""</span>; mysqli_close(<span>$dbc</span>); } <span>else</span> { <span>echo</span><span>'<p>Sorry, there was a problem uploading your screen shot image.</p>'</span>; } } } <span>else</span> { <span>echo</span><span>'<p>The screen shot must be a GIF, JPEG, or PNG image file no greater than '</p></span> . (GW_MAXFILESIZE / <span>1024</span>) . <span>' KB in size.'</span>; } <span>// Try to delete the temporary screen shot image file</span> @unlink(<span>$_FILES</span>[<span>'screenshot'</span>][<span>'tmp_name'</span>]); } <span>else</span> { <span>echo</span><span>'<p>Please enter all of the information to add your high score.</p>'</span>; } } <span>else</span> { <span>echo</span><span>'<p>Please enter the verification pass-phrase exactly as shown.</p>'</span>; } } <span>?></span></span><span>hr</span> /><span>form</span><span>enctype</span>=<span>"multipart/form-data"</span><span>method</span>=<span>"post"</span><span>action</span>=<span>"<?php echo $_SERVER['PHP_SELF']; ?>"</span>><span>input</span><span>type</span>=<span>"hidden"</span><span>name</span>=<span>"MAX_FILE_SIZE"</span><span>value</span>=<span>"<?php echo GW_MAXFILESIZE; ?>"</span> /><span>label</span><span>for</span>=<span>"name"</span>>Name:<span><span>label</span>></span><span>input</span><span>type</span>=<span>"text"</span><span>id</span>=<span>"name"</span><span>name</span>=<span>"name"</span><span>value</span>=<span>"<?php if (!empty($name)) echo $name; ?>"</span> /><span>br</span> /><span>label</span><span>for</span>=<span>"score"</span>>Score:<span><span>label</span>></span><span>input</span><span>type</span>=<span>"text"</span><span>id</span>=<span>"score"</span><span>name</span>=<span>"score"</span><span>value</span>=<span>"<?php if (!empty($score)) echo $score; ?>"</span> /><span>br</span> /><span>label</span><span>for</span>=<span>"screenshot"</span>>Screen shot:<span><span>label</span>></span><span>input</span><span>type</span>=<span>"file"</span><span>id</span>=<span>"screenshot"</span><span>name</span>=<span>"screenshot"</span> /><span>br</span> /><span>label</span><span>for</span>=<span>"verify"</span>>Verification:<span><span>label</span>></span><span>input</span><span>type</span>=<span>"text"</span><span>id</span>=<span>"verify"</span><span>name</span>=<span>"verify"</span><span>value</span>=<span>"Enter the pass-phrase."</span> /><span>img</span><span>src</span>=<span>"captcha.php"</span><span>alt</span>=<span>"Verification pass-phrase"</span> /><span>hr</span> /><span>input</span><span>type</span>=<span>"submit"</span><span>value</span>=<span>"Add"</span><span>name</span>=<span>"submit"</span> /><span><span>form</span>></span><span><span>body</span>></span><span><span>html</span>></span></code>').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i ').text(i)); }; $numbering.fadeIn(1700); }); });
以上就介绍了PHP绘图函数生成图片验证码,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。