Problem description:
thinkphp5 verification code cannot be displayed in the project. Through viewing on the console, we know: the content-type in the response header is application/json;charset=utf-8, and the verification code interface The address can be displayed normally in the browser and apifox. The content-type in the response header is application/png; charset=utf-8
Verification code interface code:
$config = [
// Verification code font size
'fontSize' => 30,
// Verification code digits
'length' => 3,
// Turn off verification code noise
'useNoise' => false,
];
$captcha = new Captcha($ config);
return $captcha->entry();
ThinkPHP5 is a popular PHP development framework. In this framework, user account security can be improved through the verification code function. However, some users may encounter the problem that the verification code cannot be displayed when using ThinkPHP5. This article will talk about the causes and solutions to this problem.
First of all, we need to understand the implementation principle of verification code. The verification code is usually implemented by a function that generates images containing random characters, interference lines, and interference points. This function will output the image, and then store the string value of the verification code in the Session on the page. When the user enters the verification code, the framework will read the string value of the verification code from the Session and compare it.
But sometimes we may encounter the problem that the verification code cannot be displayed. This is usually due to the following three situations:
1. Session failure
2. The GD library is not opened
3. Ajax refresh is not timely
Session invalidation is one of the most common problems. This is because the verification code value is stored in the Session. If the Session fails, the value of the verification code will also be lost. When the user enters the verification code, the framework will not be able to read the corresponding value from the Session, causing the verification code to fail verification.
To solve this problem, we can modify the Session configuration file and increase the Session validity time. The specific method is to set in the
session.php
file in theconfig
directory:The second problem is that the GD library is not opened. The GD library is an extension library for PHP, which is mainly used to process images. In the ThinkPHP5 framework, the generation of verification code images relies on the GD library. If the GD library is not turned on, the verification code image cannot be generated and the verification code cannot be displayed.
To solve this problem, we can find the gd2.so plug-in in the php.ini file and uncomment it:
The third problem is that the Ajax refresh is not timely. In some cases, if the verification code is generated through Ajax, the framework will not generate a new Session for the verification code under normal circumstances. In some cases, Ajax response is fast enough, and the time interval between verification code display and Session generation may be short. If the Session has not been generated during this process, the verification code will not be displayed.
To solve this problem, we can change the verification code generation method to a synchronous method instead of Ajax. The specific method is to use the
captcha_src()
function in the controller method that needs to generate the verification code to obtain the image address of the verification code. Then assign this address to thesrc
attribute of the verification code <img> tag in the view file.To sum up, if you encounter the problem that the verification code cannot be displayed when using ThinkPHP5, then you need to check the validity time of the Session, whether the GD library is turned on, and how the verification code is generated. By solving these three problems, you can successfully solve the problem of the verification code not being displayed.