
本文介绍了如何在 Laravel 8 项目中使用 .env 文件定义数组变量,并将其应用于中间件中,实现 IP 地址黑名单功能。通过修改 .env 文件格式和 config/app.php 配置文件,将字符串转换为数组,并提供了一种更灵活、可维护的数据库存储方案。
在 Laravel 项目中,我们经常需要使用环境变量来配置应用程序,例如数据库连接信息、API 密钥等。.env 文件提供了一种方便的方式来管理这些配置项。然而,直接在 .env 文件中定义数组可能会遇到一些问题。本文将介绍如何在 Laravel 8 中正确地使用 .env 变量定义数组,并将其应用于中间件中。
.env 文件本质上是一个键值对的文本文件,所有的值都会被解析为字符串。因此,我们不能直接使用 PHP 数组的语法在 .env 文件中定义数组。一个常见的解决方案是将数组元素以逗号分隔的字符串形式存储在 .env 文件中,然后在 PHP 代码中将其转换为数组。
例如,我们想要定义一个 IP 地址黑名单,可以在 .env 文件中这样设置:
BLOCK_IP_LIST=127.0.0.1,127.0.0.2,127.0.0.3
接下来,我们需要在 config/app.php 配置文件中读取该环境变量,并将其转换为 PHP 数组。可以使用 explode() 函数来实现字符串到数组的转换。
// config/app.php
return [
// ...
'block_ip' => explode(',', env('BLOCK_IP_LIST')),
// ...
];explode(',', env('BLOCK_IP_LIST')) 这行代码首先使用 env('BLOCK_IP_LIST') 读取 .env 文件中的 BLOCK_IP_LIST 变量的值,然后使用 explode(',', ...) 函数以逗号为分隔符将字符串分割成数组。
现在,我们可以在中间件中使用这个数组了。以下是一个简单的中间件示例,用于阻止来自黑名单 IP 地址的访问:
Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言。作为命令语言,它交互式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。它虽然不是Linux系统核心的一部分,但它调用了系统核心的大部分功能来执行程序、建立文件并以并行的方式协调各个程序的运行。因此,对于用户来说,shell是最重要的实用程序,深入了解和熟练掌握shell的特性极其使用方法,是用好Linux系统
24
// app/Http/Middleware/BlockIpMiddleware.php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
class BlockIpMiddleware
{
public function handle(Request $request, Closure $next)
{
$blockIps = config('app.block_ip');
if (in_array($request->ip(), $blockIps)) {
return response()->json(['message' => "You don't have permission to access this website."]);
}
return $next($request);
}
}在这个中间件中,我们使用 config('app.block_ip') 获取在 config/app.php 中定义的 IP 地址黑名单数组,然后使用 in_array() 函数检查当前请求的 IP 地址是否在黑名单中。如果在黑名单中,则返回一个 JSON 响应,拒绝访问。
最后,需要在 app/Http/Kernel.php 文件中注册该中间件。
// app/Http/Kernel.php
protected $middlewareGroups = [
'web' => [
// ...
\App\Http\Middleware\EncryptCookies::class,
// ...
],
'api' => [
'throttle:api',
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
];
protected $routeMiddleware = [
// ...
'blockip' => \App\Http\Middleware\BlockIpMiddleware::class,
];然后,可以在路由中使用该中间件:
Route::middleware(['blockip'])->group(function () {
// 需要应用 BlockIpMiddleware 的路由
Route::get('/restricted', function () {
return 'Access granted!';
});
});例如,可以创建一个 blocked_ips 表,包含一个 ip_address 字段,用于存储被阻止的 IP 地址。然后,可以使用 Eloquent 模型来查询数据库,并将结果缓存起来。
use Illuminate\Support\Facades\Cache;
use App\Models\BlockedIp;
$blockIps = Cache::rememberForever('blocked_ips', function () {
return BlockedIp::pluck('ip_address')->toArray();
});这种方法更加灵活,允许在运行时动态地添加或删除 IP 地址,而无需修改配置文件或重启服务器。
总而言之,通过适当的配置和代码转换,我们可以有效地在 Laravel 8 中使用 .env 变量定义数组,并将其应用于各种场景中。同时,也要根据实际需求选择最合适的存储和管理方案,以确保应用程序的性能和可维护性。
以上就是在 Laravel 8 中使用 .env 变量定义数组的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号