Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is the meaning of the '?', '()', and ':' symbols in PHP?

I've finally remembered what to ask. I never really got what : and ? do when a variable is being defined like this:

$ip = ($_SERVER['HTTP_X_FORWARDED_FOR']) ? $_SERVER['HTTP_X_FORWARDED_FOR'] : $_SERVER['REMOTE_ADDR'];

As you can see there is ? and : and ( )

Could anyone give me a brief detail about why and how they are used for?

like image 885
MacMac Avatar asked Nov 27 '22 23:11

MacMac


1 Answers

The expression looks like this:

$var = (condition) ? if_true : if_false

?: is the ternary operator. If condition is true, $var will be assigned the value if_true; otherwise it will be assigned the value if_false.

In your particular case:

  • This assigns the value of the X-Forwarded-For HTTP header to $ip if it exists; otherwise it uses the remote address itself.

  • This is usually used as a way to get a client's IP address. However, note that in general this is a terrible way to check for client identity. See this StackOverflow question. (Use session cookies or some sort of authentication if you need to make sure users don't clobber each other.)

  • Also, it's HTTP_X_FORWARDED_FOR, not HTTP_X_FORWARD_FOR.

  • Finally, HTTP_X_FORWARDED_FOR can be a comma-delimited list of IP addresses, not just a single one, so this has the potential to be a bug.

like image 107
John Feminella Avatar answered Dec 05 '22 06:12

John Feminella