Dalam beberapa tahun kebelakangan ini, semakin ramai pembangun yang menggunakan PHP untuk membina aplikasi Internet menghadapi masalah biasa: imej kod pengesahan tidak dapat dipaparkan dengan betul. Artikel ini akan menerangkan mengapa masalah ini berlaku dan menyediakan beberapa penyelesaian.
Dalam pembangunan aplikasi Internet, CAPTCHA ialah langkah keselamatan biasa yang memastikan hanya pengguna manusia boleh melakukan tindakan tertentu. Biasanya, CAPTCHA asas terdiri daripada imej yang dijana secara rawak dan kotak teks. Untuk melengkapkan pengesahan, pengguna mesti memasukkan teks yang ditunjukkan dalam kod pengesahan dengan betul.
Dalam PHP, proses menghasilkan imej kod pengesahan biasanya kelihatan seperti ini:
// 创建一个空白的画布,大小为 100 x 50 $captcha = imagecreatetruecolor(100, 50); // 生成验证码文本 $text = generateCaptchaText(); // 向画布中写入验证码文本 $text_color = imagecolorallocate($captcha, 0, 0, 0); imagestring($captcha, 5, 25, 15, $text, $text_color); // 添加干扰线或噪声 // ... // 输出图像 header('Content-type: image/png'); imagepng($captcha); imagedestroy($captcha);
Kod di atas mencipta kanvas kosong dengan lebar 100 piksel dan ketinggian 50 piksel , dan menggunakan generateCaptchaText()
Fungsi menjana teks kod pengesahan rawak. Ia kemudian menulis teks ke dalam kanvas dan akhirnya mengeluarkan imej.
Biasanya, kod di atas sepatutnya berfungsi dengan baik. Walau bagaimanapun, sesetengah pembangun menghadapi masalah dengan imej kod pengesahan yang tidak dipaparkan dengan betul dalam aplikasi mereka.
Terdapat banyak kemungkinan sebab imej kod pengesahan tidak dapat dipaparkan dengan betul.
header()
dipanggil beberapa kali fungsi header()
digunakan untuk menghantar pengepala HTTP kepada klien. Dalam contoh kod di atas, kami menghantar pengepala menggunakan header('Content-type: image/png')
untuk memberitahu pelanggan bahawa ini ialah imej dalam format PNG. Walau bagaimanapun, jika fungsi ini dipanggil beberapa kali, atau dipanggil sebelum output lain, ia tidak akan berkuat kuasa, menyebabkan imej kod pengesahan tidak dipaparkan dengan betul.
output_buffering
tidak didayakanPada sesetengah pelayan, output_buffering
dimatikan secara lalai. Ini bermakna jika terdapat sebarang output sebelum imej output, imej captcha tidak akan dipaparkan dengan betul kerana output telah pun dihantar kepada klien. Untuk menyelesaikan masalah ini, anda boleh menghidupkan fungsi penimbalan dalam PHP, seperti berikut:
ini_set('output_buffering', 'on');
display_errors
Hidupkan Secara lalai, PHP akan mengeluarkan ralat mesej kepada peranti penyemak imbas. Jika display_errors
didayakan, walaupun ralat kecil akan menyebabkan output terganggu, menyebabkan imej kod pengesahan tidak dipaparkan dengan betul. Untuk mengelakkan perkara ini daripada berlaku, anda boleh mematikan display_errors
seperti berikut:
ini_set('display_errors', 'Off');
Kod PHP yang dinyatakan di atas menggunakan imagecreatetruecolor()
, <.> dan imagestring()
fungsi, fungsi ini datang daripada perpustakaan pemprosesan imej yang dipanggil GD. Jika pustaka GD tidak dipasang dalam persekitaran PHP anda, PHP tidak akan dapat menggunakan fungsi ini dan imej kod pengesahan tidak akan dipaparkan dengan betul. Untuk menyelesaikan masalah ini, anda perlu memasang pustaka GD pada pelayan anda. imagepng()
header()
index.php
display_errors
untuk menyimpan mesej ralat ke fail log. error_log()
Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan masalah bahawa imej kod pengesahan php tidak boleh dipaparkan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!