Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/257.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.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-通过htaccess调用页面时获取IP_Php_.htaccess_Get_Ip - Fatal编程技术网

PHP-通过htaccess调用页面时获取IP

PHP-通过htaccess调用页面时获取IP,php,.htaccess,get,ip,Php,.htaccess,Get,Ip,我有一个PHP网站,需要知道访问客户端的IP是什么。为此,我使用以下功能: function get_client_ip() { $ipaddress = ''; if (!empty($_SERVER['HTTP_CLIENT_IP'])) { $ipaddress = $_SERVER['HTTP_CLIENT_IP']; } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { $ip

我有一个PHP网站,需要知道访问客户端的IP是什么。为此,我使用以下功能:

function get_client_ip() {
    $ipaddress = '';
    if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
        $ipaddress = $_SERVER['HTTP_CLIENT_IP'];
    } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
        $ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR'];
    } else {
        $ipaddress = $_SERVER['REMOTE_ADDR'];
    }

    return $ipaddress;
}
但是当通过url omenorpreco.com/teste访问站点时,页面返回服务器IP

当访问页面url omenorpreco.com/teste.php时,页面返回客户端IP

发生此错误的原因可能是,当您访问不带扩展名“.php”的页面时,服务器会通过.htaccess解释该页面

如何调整应用程序的两种访问,返回客户端的IP,而不是服务器IP

上面是我的访问代码


php\u值允许\u url\u打开 php\u值允许\u url\u包含1 重新启动发动机 重写cond%{REQUEST_FILENAME}-F 重写cond%{REQUEST_FILENAME}-D 重写规则!。(js | ico | txt | gif | bmp | jpeg | jpg | png | css | log | rss | zip | xml | sql | pdf | doc docx | xls)$url|u amigavel.php 重写规则sitemap categoria.xml$sitemap.php?number=categoria 重写规则站点地图-([0-9]+).xml$sitemap.php?编号=$1 重写规则sitemap_index.xml$sitemap_index.php

和url_amigavel.php代码

<?php

$geturl = explode( "/", str_replace( strrchr( $_SERVER["REQUEST_URI"], "?" ), "", $_SERVER["REQUEST_URI"] ) );
array_shift( $geturl );

$tipo = $geturl[0];


if ( is_file( "$tipo.php" ) )
{
    include "$tipo.php";
}
else
{
    echo "page not found";

}

?>


编辑:我可以使用客户端IP在HTACCESS中设置全局变量吗?

将其放入一个文件中,并使用扩展名和不使用扩展名运行:

<?php
function get_ip_address() {
    return $_SERVER['REMOTE_ADDR'];
}
    echo get_ip_address();

?>

我想我刚刚看到它在你的服务器上工作! 将
.htaccess
更改为

php_value allow_url_fopen on
php_value allow_url_include 1

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule !.(js|ico|txt|gif|bmp|jpeg|jpg|png|css|log|rss|zip|xml|sql|pdf|doc|docx|xls)$ url_amigavel.php
RewriteRule sitemap-categoria.xml$ sitemap.php?number=categoria
RewriteRule sitemap-([0-9]+).xml$ sitemap.php?number=$1
RewriteRule sitemap_index.xml$ sitemap_index.php

SetEnvIfNoCase Remote_Host "(.*)" HTTP_MY_REMOTE_HOST=$1
SetEnvIfNoCase Remote_Addr "(.*)" HTTP_MY_REMOTE_ADDR=$1
function get_client_ip() {
    if (isset($_SERVER[REDIRECT_HTTP_MY_REMOTE_ADDR])) {
        return $_SERVER[REDIRECT_HTTP_MY_REMOTE_ADDR];

    } else if (isset($_SERVER[REDIRECT_HTTP_MY_REMOTE_HOST])) {
        return $_SERVER[REDIRECT_HTTP_MY_REMOTE_HOST];

    } else if (isset($_SERVER[HTTP_MY_REMOTE_ADDR])) {
        return $_SERVER[HTTP_MY_REMOTE_ADDR];

    } else if (isset($_SERVER[HTTP_MY_REMOTE_HOST])) {
        return $_SERVER[HTTP_MY_REMOTE_HOST];

    }
}

echo get_client_ip();
test.php
更改为

php_value allow_url_fopen on
php_value allow_url_include 1

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule !.(js|ico|txt|gif|bmp|jpeg|jpg|png|css|log|rss|zip|xml|sql|pdf|doc|docx|xls)$ url_amigavel.php
RewriteRule sitemap-categoria.xml$ sitemap.php?number=categoria
RewriteRule sitemap-([0-9]+).xml$ sitemap.php?number=$1
RewriteRule sitemap_index.xml$ sitemap_index.php

SetEnvIfNoCase Remote_Host "(.*)" HTTP_MY_REMOTE_HOST=$1
SetEnvIfNoCase Remote_Addr "(.*)" HTTP_MY_REMOTE_ADDR=$1
function get_client_ip() {
    if (isset($_SERVER[REDIRECT_HTTP_MY_REMOTE_ADDR])) {
        return $_SERVER[REDIRECT_HTTP_MY_REMOTE_ADDR];

    } else if (isset($_SERVER[REDIRECT_HTTP_MY_REMOTE_HOST])) {
        return $_SERVER[REDIRECT_HTTP_MY_REMOTE_HOST];

    } else if (isset($_SERVER[HTTP_MY_REMOTE_ADDR])) {
        return $_SERVER[HTTP_MY_REMOTE_ADDR];

    } else if (isset($_SERVER[HTTP_MY_REMOTE_HOST])) {
        return $_SERVER[HTTP_MY_REMOTE_HOST];

    }
}

echo get_client_ip();
.htaccess
中设置变量的灵感来自:


很高兴终于成功了

您已将.htaccess上的allow\u url\u include设置为1。这会造成问题,因为当你告诉PHP包含一个文件时,预处理器认为它是一个URL,其他人告诉过你这一点,所以让我们直说吧

我的猜测是,只需禁用允许url包含。这是一种不好的做法,是一种安全风险,例如,对于文件内容,没有什么不能做的

如果您仍然认为包含远程文件是一个好主意,那么您应该尝试使用完整路径,将此包含与Benjy1996提供的代码一起使用:

include(getcwd().$tipo..php”)



PD:您可能应该将ip函数更改为只返回$\u SERVER['REMOTE\u ADDR'],因为它是您最信任的一个,因为它最难伪造。

应用程序如何处理url路由的可能重复。@rjdown OP不是问如何?将
.htaccess
文件内容添加到您的帖子中。似乎(通过一个URL上的1行和另一个URL上的2行的回音)路由到不同的脚本可能是一个问题。你可以发布
URL\u amigavel.php
(URL\u-friendly.php)的内容吗?嗨,斯特雷多。你能进入这个页面吗?我将您的代码放入此页面进行测试。。访问并查看错误。。第一个链接回复一个正确的ip第二个链接返回一个服务器ip第二个链接通过htaccess访问test2.php页面。该网页不为我加载。你能再检查一下服务器设置吗?我修改了我的文件test2.php,结果是一样的。。你可以访问吗?我无法访问该页面,它显示“此网页不可用”。我可以访问它,IP地址问题仍然存在。似乎服务器发出了一个新的请求,或者
url\u amigavel.php
做了一些重要的事情(被要求发布)。我认为剩余的斜杠可能是导致
404
的原因,如果前一个答案不起作用,请尝试我的更新答案。尝试放置
echo$tipo
if
语句之前查看从$tipo请求文件的位置。php是您的get_client_ip函数所在的文件吗?嗯,似乎是对的,认为我的解决方案没有什么区别。最后!!!!!非常感谢你。当我在htaccess中设置变量时,我可以从客户端获得正确的IP。。非常感谢。您好Benjy/David-我试图更改我的htaccess,删除了两行php值设置,并输入代码include(getcwd().“/”$tipo..php”);进入url_amigavel.php,两个都不起作用=(我刚刚在我的服务器上复制了您的原始
.htaccess
test.php
url\u amigavel.php
,它提供了预期的结果和功能。似乎某些地方必须进行不同的配置。哇=(你只是复制了我的原始文件?我访问了你的服务器,真的工作得很好..也许是服务器配置?是的,你的原始代码工作:)。这是某个地方的配置。你能想出任何可能导致此问题的原因吗?你正在使用的任何框架或其他已设置的配置?我想我可能已经找到了可能的原因,只需检查
$\u服务器['HTTP\u X\u FORWARDED\u']
字段,忽略
远程地址
,有时
。htaccess
可以使用
重写规则
更改此字段