I need to store the IP address of the users who comment, in the database after form submission.
Is there any symfony2 function to get the IP? Or any other way to get the IP?
You can get the client IP using Request service:
$container->get('request')->getClientIp();
In Symfony before 2.3 $this->container->get('request')->getClientIp()
works only inside of master request controller. In sub-request controller this always returns 127.0.0.1
. In case your project uses sub-requests with Symfony 2.2, the bullet-proof solution is to create kernel.request
listener and save the IP from the master request in it.
In Symfony 2.3 this was fixed so for internal sub-requests the real IP is pushed to the list of proxies, see https://github.com/symfony/symfony/commit/2f3b33a630727cbc9cf21262817240a72a8dae0c So you need to add 127.0.0.1
to trusted_proxies
configuration parameter to get client ip from the Request in sub-requests in Symfony 2.3+, but you shouldn't do this on shared hosting for security reasons.
Also, 127.0.0.1
had to be added to trusted_proxies
explicitly if built-in HTTP cache (AppCache
in web/app.php
) was used before Symfony 2.3.20. This cache tries to look like a real reverse-proxy and modifies some headers of master request. Fixed in https://github.com/symfony/symfony/commit/902efb8a84e8f0acf6a63e09afa08e3dcdd80fb9
Since Symfony 2.4 and in 3.x the preferred way to access current request is either using request_stack
service
$this->container->get('request_stack')->getCurrentRequest()->getClientIp();
or injecting Request into controller, see http://symfony.com/doc/current/book/controller.html#the-request-as-a-controller-argument
public function indexAction(Request $request) { $ip = $request->getClientIp(); }
But the concern about excluding 127.0.0.1 when used in sub-requests still apply, but now you may try to explicitly refer to master request using
$this->container->get('request_stack')->getMasterRequest()->getClientIp();
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With