Dengan pembangunan tapak web, kod pengesahan telah menjadi langkah keselamatan yang diperlukan untuk pendaftaran atau log masuk di banyak tapak web. Walau bagaimanapun, kadangkala lokasi kod pengesahan tidak memenuhi keperluan reka bentuk kami, jadi hari ini kami akan bercakap tentang cara menukar lokasi kod pengesahan dalam PHP.
Pertama sekali, kita perlu memahami prinsip penjanaan kod pengesahan. Biasanya, kod pengesahan dijana dalam skrip PHP menggunakan perpustakaan GD Perpustakaan GD menyediakan beberapa fungsi untuk menjana kod pengesahan, seperti imagecreate(), imagecolorallocate(), imagestring(), dll.
Seterusnya, kami akan menerangkan fungsi-fungsi ini. Jika anda menggunakan kaedah penjanaan kod pengesahan lain, anda boleh mengubah suai mengikut prinsip penjanaannya.
Kod pengesahan boleh dikeluarkan ke kanvas melalui fungsi imagestring() dan kami boleh menggunakannya untuk mengawal lokasi kod pengesahan.
Berikut ialah skrip penjanaan kod pengesahan asas:
<?php session_start(); header("Content-type: image/png"); $code_len = 4; $width = 80; $height = 25; $charset = 'abcdefghkmnprstuvwxyABCDEFGHKMNPRSTUVWXY3456789'; $code = ''; for ($i = 0; $i < $code_len; $i++) { $code .= $charset[mt_rand(0, strlen($charset) - 1)]; } $_SESSION['verify_code'] = strtoupper($code); $img = imagecreate($width, $height); imagecolorallocate($img, 255, 255, 255); //设置背景颜色 $font_color = imagecolorallocate($img, mt_rand(0, 100), mt_rand(0, 100), mt_rand(0, 100)); for ($i = 0; $i < $code_len; $i++) { $font_size = mt_rand(12, 16); $angle = mt_rand(-10, 10); $f_x = ($width / $code_len) * $i + mt_rand(0, 5); $f_y = $height / 2 + mt_rand(-5, 6); imagestring($img, $font_size, $f_x, $f_y, $code[$i], $font_color); //输出验证码 } imagepng($img); imagedestroy($img);
Dengan kod di atas, kod pengesahan akan dikeluarkan kepada kedudukan rawak pada kanvas. Jika kami ingin membetulkan kod pengesahan di lokasi yang ditentukan, kami hanya perlu mengubah suai nilai $f_x
dan $f_y
mengikut keperluan reka bentuk.
Sebagai contoh, jika kami membetulkan kod pengesahan di tengah-tengah kanvas, kami hanya perlu mengubah suai nilai $f_x
dan $f_y
seperti berikut:
$f_x = ($width / 2 - (($font_size + 3) * $code_len) / 2) + ($font_size + 3) * $i; // 控制水平方向位置 $f_y = $height / 2 + mt_rand(-5, 6); // 控制竖直方向位置
Selepas dijalankan, kod pengesahan akan muncul di tengah-tengah kanvas.
Jika kami ingin meletakkan kod pengesahan dalam elemen HTML yang ditentukan, kami boleh mengawal kedudukan kanvas melalui CSS dan Kanvas tempat dibenamkan ke dalam elemen HTML.
Sebagai contoh, jika kita ingin meletakkan kod pengesahan di dalam elemen <div id="verify">, kita boleh menambah kod berikut dalam CSS: <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">#verify {
position: relative;
background-color: #fff; /* 图片背景色 */
width: 100px;
height: 32px;
text-align: center;
}
#verify img {
position: absolute; /* 设置验证码图片位置 */
top: 0;
left: 0;
}</pre><div class="contentsignin">Salin selepas log masuk</div></div><p> Kemudian tambah kod berikut dalam HTML: </p><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false"><div id="verify">
<img src="verify.php" alt="验证码">
</div></pre><div class="contentsignin">Salin selepas log masuk</div></div><p>Dengan kod di atas, kami boleh membenamkan kod pengesahan yang dijana ke dalam elemen yang ditentukan, dan kedudukannya akan dikawal oleh CSS. </p><ol start="3"><li>Letakkan kod pengesahan pada latar belakang </li></ol><p>Dalam sesetengah kes, kami mungkin perlu meletakkan kod pengesahan pada latar belakang, contohnya, latar belakang ialah gambar besar , kami Kod pengesahan perlu diletakkan di sudut skrin. </p><p>Untuk melaksanakan fungsi ini, kita boleh menjana imej latar belakang tanpa kod pengesahan, dan kemudian melukis kod pengesahan ke latar belakang. </p><p>Berikut ialah pelaksanaan asas: </p><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false"><?php
session_start();
header("Content-type: image/png");
$width = 300;
$height = 200;
$img = imagecreate($width, $height);
imagecolorallocate($img, 255, 255, 255); //设置背景颜色
// 生成不带验证码的背景图
$bg_img = imagecreatefromjpeg('bg.jpg');
imagecopy($img, $bg_img, 0, 0, 0, 0, $width, $height);
$code_len = 4;
$charset = 'abcdefghkmnprstuvwxyABCDEFGHKMNPRSTUVWXY3456789';
$code = '';
for ($i = 0; $i < $code_len; $i++) {
$code .= $charset[mt_rand(0, strlen($charset) - 1)];
}
$_SESSION['verify_code'] = strtoupper($code);
// 将验证码写入背景图中
$font_color = imagecolorallocate($img, mt_rand(0, 100), mt_rand(0, 100), mt_rand(0, 100));
for ($i = 0; $i < $code_len; $i++) {
$font_size = mt_rand(12, 16);
$angle = mt_rand(-10, 10);
$f_x = mt_rand(0, $width - ($font_size + 3));
$f_y = mt_rand(0, $height - $font_size);
imagestring($img, $font_size, $f_x, $f_y, $code[$i], $font_color); //输出验证码
}
imagepng($img);
imagedestroy($img);</pre><div class="contentsignin">Salin selepas log masuk</div></div><p>Dalam kod di atas, kami mula-mula memuatkan imej latar belakang asal <code>bg.jpg
, kemudian menyalinnya ke kanvas baharu, dan kemudian menjana Captcha dan masukkan ke dalam kanvas. (Sila ambil perhatian bahawa kod pengesahan yang dijana dalam contoh ini adalah dalam kedudukan rawak. Untuk mencapai tujuan kami, beberapa pengubahsuaian perlu dibuat)
Pengenalan kepada artikel ini Terdapat tiga kaedah untuk menukar kedudukan kod pengesahan Yang pertama adalah berdasarkan kod pengesahan yang dijana oleh PHP dan dilaksanakan dengan mengubahsuai kedudukan output Yang kedua ialah membenamkan kanvas kod pengesahan ke dalam elemen HTML dan mengawal kedudukan melalui CSS Yang ketiga ialah membenamkan kanvas kod pengesahan ke dalam elemen HTML dan mengawal kedudukan melalui CSS Yang pertama ialah menambah kod pengesahan ke latar belakang supaya kedudukan kod pengesahan adalah konsisten dengan latar belakang. Kaedah pelaksanaan yang berbeza sesuai untuk senario yang berbeza, dan anda boleh memilih penyelesaian terbaik mengikut keperluan sebenar anda.
Atas ialah kandungan terperinci Bagaimana untuk menukar kedudukan kod pengesahan dalam PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!