Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php $\u服务器[';远程地址';]未提供正确的ip地址_Php_Ip_Localhost - Fatal编程技术网

Php $\u服务器[';远程地址';]未提供正确的ip地址

Php $\u服务器[';远程地址';]未提供正确的ip地址,php,ip,localhost,Php,Ip,Localhost,我正在用PHP制作一个表单,我想记录用户的IP地址。这是我使用的代码的剪贴: <input type="hidden" name="ip" value="<?php echo $_SERVER['REMOTE_ADDR']; ?>" /> “::1”是本地主机的IPV6版本(或127.0.0.1) 打开端口80并从您的IP地址访问页面。应该可以正常工作:)。这实际上是您的IP。尽管是IPv6 IP而不是IPv4 在IPv6中,::1代表localhost/127.0.0

我正在用PHP制作一个表单,我想记录用户的IP地址。这是我使用的代码的剪贴:

<input type="hidden" name="ip" value="<?php echo $_SERVER['REMOTE_ADDR']; ?>" />

“::1”是本地主机的IPV6版本(或127.0.0.1)


打开端口80并从您的IP地址访问页面。应该可以正常工作:)。

这实际上是您的IP。尽管是IPv6 IP而不是IPv4

在IPv6中,::1代表localhost/127.0.0.1

IP
::1
是IPv6版本中的“本地主机”。您的计算机配置了IPv6,因此您将获得此IP地址。当您在live server上部署应用程序时,可能不会在服务器上配置IPv6,并且您的应用程序将获得更熟悉的IPv4地址(例如aaa.bbb.ccc.ddd)

另一方面,
$\u服务器['REMOTE\u ADDR']
可能并不总是包含正确的地址。最好使用:

if(!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
    $ip_address = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
    $ip_address = $_SERVER['REMOTE_ADDR'];
}
1) 。您不需要将
添加到表单中。在这种情况下,很容易伪造它(实际上,在任何情况下都很容易)。最好将IP添加到服务器端的数据中

2) 您还可以查看
$\u服务器['HTTP\u X\u FORWARDED\u']
。 若用户有一个代理,其中一些(透明代理)将真实用户的IP放在那个里

3) 请注意:关于IP的数据根本不可信

if(isset($_SERVER['HTTP_X_FORWARDED_FOR']) && $_SERVER['HTTP_X_FORWARTDED_FOR'] != '') {
                $ip_address = $_SERVER['HTTP_X_FORWARDED_FOR'];
            } else {
                $ip_address = $_SERVER['REMOTE_ADDR'];
            }   
此代码返回客户端的ip。如果您认为这是服务器IP,您可能是对的,因为您的服务器(大概)托管在您的pc上。 由于您的客户端(pc)和服务器运行在同一台pc上,因此它们都具有相同的ip。
如果你不明白这一点,你应该对IP、本地IP和所有这些东西做一些研究。

Thx获取提交时更改它的提示;)如果有人以某种方式更改了他的ip地址(比如使用VPN或其他什么)?那我就得不到那台电脑的正确ip了。是不是太晚了?但也要记住,如果你使用HTTP_X_FORWARDED_,你不能相信这只允许访问本地ip以获得安全的管理员页面,因为这个头很容易被欺骗。事实上,StackOverflow曾经是这件事的受害者,幸运的是一位友好的用户向他们报告了这件事。@smdrager:那么获取用户机器IP地址的安全方法是什么呢?我需要允许我的页面只为一个IP打开。@sqlchild如果您需要它为任何IP工作,那么您为什么还要关心IP地址呢?没有简单的方法可以获得IP地址。我展示的代码就是我使用过的代码,它涵盖了除少数例外之外的所有内容。@AleksG:我需要在我的网站上打开一个页面,只针对给定的允许IP,而不针对任何其他IP。那么怎么做呢?@sqlchild选择:用户名/密码、用户证书、隧道。
if(isset($_SERVER['HTTP_X_FORWARDED_FOR']) && $_SERVER['HTTP_X_FORWARTDED_FOR'] != '') {
                $ip_address = $_SERVER['HTTP_X_FORWARDED_FOR'];
            } else {
                $ip_address = $_SERVER['REMOTE_ADDR'];
            }