Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk menyelesaikan masalah bahawa imej kod pengesahan php tidak boleh dipaparkan

Bagaimana untuk menyelesaikan masalah bahawa imej kod pengesahan php tidak boleh dipaparkan

PHPz
PHPzasal
2023-04-12 09:20:541656semak imbas

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.

Latar Belakang Masalah

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.

Punca masalah

Terdapat banyak kemungkinan sebab imej kod pengesahan tidak dapat dipaparkan dengan betul.

1. Fungsi 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.

2 output_buffering tidak didayakan

Pada 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');

3 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');

4 Pustaka imej tidak dipasang

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()

Penyelesaian

Mengikut sebab di atas, kami boleh mengambil langkah berikut untuk menyelesaikan masalah imej kod pengesahan tidak dipaparkan dengan betul:

    Pastikan bahawa fungsi
  1. hanya digunakan Dipanggil sekali dan sebelum sebarang output. header()
  2. Dayakan penimbalan dalam fail kemasukan aplikasi (biasanya
  3. ). index.php
  4. Tutup
  5. dan gunakan fungsi display_errors untuk menyimpan mesej ralat ke fail log. error_log()
  6. Sahkan bahawa pustaka GD telah dipasang dengan betul dan diaktifkan dalam fail konfigurasi PHP.
Kesimpulan

Walaupun tidak begitu biasa bagi imej kod pengesahan gagal dipaparkan dengan betul dalam aplikasi dalam talian, apabila ia berlaku, ia akan menjejaskan pengalaman dan aplikasi pengguna secara serius. keselamatan. Dengan memahami punca masalah di atas dan mengambil penyelesaian yang betul, anda boleh mengurangkan kemungkinan masalah ini berlaku.

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn