Laravel在返回JSON时,会对中文进行转码,转码后的内容无法用肉眼直接识别,所以为了调试方便,可以禁止对中文进行转码:
setEncodingOptions(JSON_UNESCAPED_UNICODE);
Laravel在返回JSON时,会对中文进行转码,转码后的内容无法用肉眼直接识别,所以为了调试方便,可以禁止对中文进行转码:
setEncodingOptions(JSON_UNESCAPED_UNICODE);
Nginx+PHP+HTTPS的配置模板,如果要部署其它网站,可以基于此进行修改:
# 处理 HTTP 请求,所有请求都重定向到 https://lwbj.cn
server {
listen 80;
server_name lwbj.cn www.lwbj.cn; # 同时匹配带 www 和不带 www 的域名
# 所有请求都重定向到 https://lwbj.cn
return 301 https://lwbj.cn$request_uri;
}
# 处理不带 www 的 HTTPS 请求,重定向到带 www 的域名
server {
listen 443 ssl http2;
server_name lwbj.cn; # 不带 www 的域名
ssl_certificate /etc/nginx/ssl/www.lwbj.cn.pem; # 证书路径
ssl_certificate_key /etc/nginx/ssl/www.lwbj.cn.key; # 证书路径
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers EECDH+AESGCM:EDH+AESGCM;
ssl_ecdh_curve secp384r1;
ssl_session_timeout 10m;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;
# 重定向所有不带 www 的 HTTPS 请求到 www.lwbj.cn
return 301 https://lwbj.cn$request_uri;
}
# 处理带 www 的 HTTPS 请求
server {
listen 443 ssl http2;
root /var/www/www.lwbj.cn; # 确保这里是正确的根目录路径
index index.html index.htm index.php index.nginx-debian.html;
server_name www.lwbj.cn;
client_max_body_size 20m;
ssl_certificate /etc/nginx/ssl/www.lwbj.cn.pem; # 确保证书路径正确
ssl_certificate_key /etc/nginx/ssl/www.lwbj.cn.net.key; # 确保证书路径正确
#加上TLSv1,HTTPS检测会报PCI DSS不合规
ssl_protocols TLSv1.2 TLSv1.3;# Requires nginx >= 1.13.0 else use TLSv1.2
ssl_prefer_server_ciphers on;
ssl_ciphers EECDH+AESGCM:EDH+AESGCM;
ssl_ecdh_curve secp384r1; # Requires nginx >= 1.1.0
ssl_session_timeout 10m;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off; # Requires nginx >= 1.5.9
ssl_stapling on; # Requires nginx >= 1.3.7
ssl_stapling_verify on; # Requires nginx => 1.3.7
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}
}
Nginx+PHP+HTTP的配置模板,如果要部署其它网站,可以基于此进行修改:
server {
listen 80;
root /var/www/www.example.com;
# Add index.php to the list if you are using PHP
index index.html index.htm index.php index.nginx-debian.html;
server_name www.example.com example.com;
client_max_body_size 20m;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
# With php-fpm (or other unix sockets):
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}
}
运行命令:
dpkg-reconfigure tzdata
根据需要选择,很简单。
dpkg-reconfigure tzdata
是一个用于重新配置系统时区的命令。
在基于 Debian 的 Linux 系统(如 Ubuntu)中,tzdata
是一个提供时区信息的软件包。通过运行 dpkg-reconfigure tzdata
,你可以重新设置系统的时区,以确保系统显示的时间是正确的。
设置完成后,命令会显示类似以下的信息:
Current default time zone: 'Asia/Shanghai'
Local time is now: Fri Nov 29 18:45:00 CST 2024
Universal Time is now: Fri Nov 29 10:45:00 UTC 2024
可以执行date
命令以查看当前时间。
1、缓存配置信息:php artisan config:cache
该操作把配置信息从.env缓存到php文件中,否则会因为高并发,多个请求同时读取.env文件,会造成读取失败,从而读取到了config文件夹下的默认配置信息,会造成数据库连接失败,或读取不到 APPP_KEY 等错误。
2、打开opcache,这个真的会有很大的性能提升!执行 vi /etc/php/8.3/fpm/php.ini
,注意不同服务器上的版本和路径。
具体修改地方如下图:
Laravel中做登录,真的太简单了,框架已经集成了大多数的功能,我们只需要把相关数据传递过去即可。代码如下:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class LoginController extends Controller
{
public function index()
{
// 如果用户已登录,则直接跳转到之前页面
if (Auth::check()) {
return redirect(url()->previous());
}
return view('login');
}
public function login(Request $request)
{
$credentials = $request->validate([
'username' => ['required'],
'password' => ['required'],
]);
if (Auth::attempt($credentials, $request->remember)) {
$request->session()->regenerate();
return redirect()->intended();
}
return back()->withErrors([
'loginError' => '用户名或密码不正确。',
])->onlyInput('username');
}
public function logout(Request $request)
{
Auth::logout();
$request->session()->invalidate();
$request->session()->regenerateToken();
return redirect('/')->with('success', '退出成功!');
}
}
相应的路由如下:
Route::get('/login', [LoginController::class, 'index'])->name('login.index');
Route::post('/login', [LoginController::class, 'login'])->name('login');
Route::get('/logout', [LoginController::class, 'logout'])->middleware('auth')->name('logout');
Laravel中表单验证可以用FormRequest来进行,但是这个默认是返回视图文件的,如果想要把验证结果以JSON格式返回,可以使用如下代码(failedValidation函数):
<?php
namespace App\Http\Requests;
use Illuminate\Contracts\Validation\Validator;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\ValidationException;
use Symfony\Component\HttpFoundation\Response;
class TagStoreRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array<string, mixed>
*/
public function rules(): array
{
return [
'tag' => 'required|unique:tags',
];
}
public function messages(): array
{
return [
'tag.required'=> '标签名称不能为空!',
'rag.unique' => '该标签已存在!',
];
}
protected function failedValidation(Validator $validator)
{
throw new ValidationException(
$validator,
response()->json(
[
'code'=>-1,
'msg'=> $validator->errors()->first()
],
Response::HTTP_UNPROCESSABLE_ENTITY
)
);
}
}
在执行update进行更新数据时,有时需要对唯一性进行验证,这时要在验证项的后面加上一个ID,不然Laravel会认为该字段内容已存在。
具体验证代码如下:
$validator = validator($request->all(), [
'name' => 'required|unique:departments,name,' . $department->id,
]);
if ($validator->fails()) {
return response()->json([
'code' => -1,
'msg' => $validator->errors()->first()
])->setEncodingOptions(JSON_UNESCAPED_UNICODE);
}
$department->update($validator->valid());
return response()->json(['code' => 0, 'msg' => 'success']);
利用接近2天的时间,整理了从2009年到2019年10年间的近500篇旧文章,并发布到了网站上,这真的是一个体力活。
纯手工整理,整理完发布完后,手腕都酸了,需要好好休息一下。
整理的大部分文章都是原创,还有相当多的文章是从网上收集的,这些就不放上来了,没有什么意义。
至此,“技术点滴”基于汇集了我的绝大部分原创文章,以后新的文章也会尽量更新上来。
虽然很多文章都不成系统,技术点都很零碎,但这都是在开发过程中随手记的,所以没有那么多的时间写成系列的文章,很多的文章甚至都只有代码。
整理文章的这两天,有时一边整理一边在想,这些年来做的这些都有什么意义?有时夜深了还在电脑前,这么多的付出,值得吗?
现在想来,最大的意义就是把时间换了钱,养了家糊了口,仅此而已。
现在整理出来,分享出来,希望能帮助更多的人,就像曾经的我。
这个站,也算是对自己15年编程生涯的一个交代。
新增时的验证:
$validator = validator($request->all(), [
'name' => 'required|unique:departments',
]);
if ($validator->fails()) {
return response()->json([
'code'=>-1,
'msg'=> $validator->errors()->first()
])->setEncodingOptions(JSON_UNESCAPED_UNICODE);
}
Department::create($validator->valid());
return response()->json(['code'=>0]);
获取已验证的数据:$validator->valid()