Php Laravel,获取访客Ip的最佳方法是什么?
我正在寻找最受支持/安全的方法来捕获访问者的Ip地址 目前,我可以通过以下方法保存访问者Ip 拨打电话的路线Php Laravel,获取访客Ip的最佳方法是什么?,php,laravel,controller,ip,refactoring,Php,Laravel,Controller,Ip,Refactoring,我正在寻找最受支持/安全的方法来捕获访问者的Ip地址 目前,我可以通过以下方法保存访问者Ip 拨打电话的路线 Route::get('/','VisitorController@multidisplay'); 在multidisplay函数中,我调用另一个控制器来捕获和存储访客Ip,如-> public function multidisplay() { //calling log visitor controller app()->cal
Route::get('/','VisitorController@multidisplay');
在multidisplay函数中,我调用另一个控制器来捕获和存储访客Ip,如->
public function multidisplay()
{
//calling log visitor controller
app()->call('App\Http\Controllers\LogVisitIpController@store');
return view('welcome')
->with('sliderimg', Sliderimage::all())
->with('postimg', PostImage::orderBy('created_at', 'desc')->take(3)->get())
;
}
最后,在LogVisitIpController中存储访问者Ip的实际功能
public function store(Request $request)
{
$bla=$this->getIp();
$myvisitor = new LogVisitIp();
$myvisitor->visitorIp=$bla;
$myvisitor->save();
}
现在我有两个问题
注意:VisitorController用于将访问者的请求保存在DB中并发送邮件,我可以收集IP并从访问者的请求中传递,但我的目标是在访问者打开我的网站或发出ping请求时立即捕获IP 即使您的代码实际上可以工作,我也不建议使用这种技术。 这是你应该做的 定义一个仅用于保存IP的类。您将在此处移动真正记录ip的代码
Class VisitIpLoggerService
{
public function storeIp(Request $request)
{
$myvisitor = new LogVisitIp();
$myvisitor->visitorIp=$request->ip();
$myvisitor->save();
}
}
然后将该服务注入控制器的函数中,并像这样调用该函数。这样,您的代码将更易于维护
public function multidisplay(Request $request, VisitIpLoggerService $ipLogger)
{
//just call the service
$ipLogger->storeIp($request);
即使您的代码实际上可以工作,我也不建议使用这种技术。 这是你应该做的 定义一个仅用于保存IP的类。您将在此处移动真正记录ip的代码
Class VisitIpLoggerService
{
public function storeIp(Request $request)
{
$myvisitor = new LogVisitIp();
$myvisitor->visitorIp=$request->ip();
$myvisitor->save();
}
}
然后将该服务注入控制器的函数中,并像这样调用该函数。这样,您的代码将更易于维护
public function multidisplay(Request $request, VisitIpLoggerService $ipLogger)
{
//just call the service
$ipLogger->storeIp($request);
将此添加到控制器中
'ip_address_variable' => \Request::ip();
对于你的情况
public function store(Request $request)
{
$bla=$this->getIp();
$myvisitor = new LogVisitIp();
$myvisitor->visitorIp=$request->ip();
$myvisitor->save();
}
将此添加到控制器中
'ip_address_variable' => \Request::ip();
对于你的情况
public function store(Request $request)
{
$bla=$this->getIp();
$myvisitor = new LogVisitIp();
$myvisitor->visitorIp=$request->ip();
$myvisitor->save();
}
您是否有任何登录系统或其适用于将访问您网站特定模块的任何人?没有,这是一个单页网站。访客只能以客人的身份发送请求,这样就可以了。您可以使用任何方式存储访问者的IP。在单个项目中使用调用模型是一种非常好的方法。根据我的调用,从任何其他控制器中的一个控制器调用函数是一种糟糕的方法contranLogVisitIpController@store在…内VisitorController@multidisplay. 我想使用一个有说服力的模型作为中间人b/w两个控制器或任何其他更好的方法,如php trait。您有任何登录系统或其供任何人访问您的网站的特定模块吗?不,这是一个单页网站。访客只能以客人的身份发送请求,这样就可以了。您可以使用任何方式存储访问者的IP。在单个项目中使用调用模型是一种非常好的方法。根据我的调用,从任何其他控制器中的一个控制器调用函数是一种糟糕的方法contranLogVisitIpController@store在…内VisitorController@multidisplay. 我想使用一个有说服力的模型作为中间人b/w两个控制器或任何其他更好的方法,比如php trait。但是我想简单一点,LogVisitipController仅用于捕获IP地址,您的方法和我的方法的唯一区别在于VisitorController中调用/访问函数store/storeip的方式。然而,你的通话方式看起来很干净。另外,如果使用了Laravel的内置方法来捕获IP地址,我如何确定它是否是真正的IP,即不是代理。刚刚测试了您的方法。这对我来说不起作用,它抛出了一个异常“BadMethodCallException调用未定义的方法App\LogVisitIp::store()”@SyedAqeel我无法帮助检查代码,将其发布到某个地方,我会尝试看一看……我会更进一步,创建一个路由中间件。但是我想简单一点,LogVisitipController仅用于捕获IP地址,您的方法和我的方法的唯一区别在于VisitorController中调用/访问函数store/storeip的方式。然而,你的通话方式看起来很干净。另外,如果使用了Laravel的内置方法来捕获IP地址,我如何确定它是否是真正的IP,即不是代理。刚刚测试了您的方法。它对我来说不起作用,它抛出了一个异常“BadMethodCallException调用未定义的方法App\LogVisitIp::store()”@SyedAqeel我无法帮助检查代码,将它发布到某个地方,我会尝试看一看。。。