【问题标题】:Referral URL in phpphp中的引用URL
【发布时间】:2010-01-15 06:13:27
【问题描述】:

所以我试图获取访问者来自的页面。我将此代码插入到一个 php 文件中,我试图查看该页面的 URL,但它不起作用,有什么建议吗?

<?php 

  $ref = getenv("HTTP_REFERER"); 
  echo $ref; 

?>

(在一些答案后添加) 我也试过了

print $_SERVER["HTTP_REFERER"];

这也不行

在我多次更新网站后它起作用了,不知道为什么首先出现问题,无论如何谢谢:)

【问题讨论】:

  • “不工作”是什么意思?
  • 我的意思是,它什么也没返回。我试图回应它,它什么也没打印,我试图将它存储到一个变量中,该变量包含“”(什么都没有)。

标签: php


【解决方案1】:

您是否尝试过通过$_SERVER 超全局访问?

print $_SERVER["HTTP_REFERER"];

【讨论】:

  • 假设您的脚本是正确的(而不是语法错误等)。您确定有一个 http 引荐来源网址吗?检查您的 HTTP 标头,因为 PHP 从那里获取引荐来源网址。如果客户端没有发送推荐人,则没有。
  • 它不返回任何错误,它只是不打印任何内容或不存储变量中的任何内容。我尝试了许多不同的页面,看看问题是否出在我所指的网站上,但没有任何效果
  • 在我多次更新网站后它工作了,不知道为什么首先出现问题,谢谢:)
【解决方案2】:

$_SERVER['HTTP_REFERER'] 是访问此信息的最佳方式。

根据您对其他回复的 cmets:

  1. 你真的是从某个地方来的吗?如果您刷新浏览器,则可能不会发送此值。因此,请确保您的浏览器正在发送标头。如果您将此脚本放在公共网址上,我很乐意检查并验证。
  2. 您确实应该打开所有错误。如果标头没有发送并且您仍然访问它,PHP 将发出 E_NOTICE。如果您正在调试您的代码,您应该打开所有错误消息并确保没有 E_NOTICE 或更糟。

【讨论】:

    【解决方案3】:

    也许是一句愚蠢的话,但$_SERVER["HTTP_REFERER"] 仅在您使用超链接进入页面时才有效。 例如

    /goto.html

    <a href="refer.php">go to refer</a>
    

    /refer.php

    <?php
    print "You entered using a link on ".$_SERVER["HTTP_REFERER"];
    ?>
    

    如果您直接在浏览器中输入链接位置,HTTP_REFERER 将不起作用。

    【讨论】:

      【解决方案4】:

      getenv() 在作为 CGI 脚本运行时使用。使用 SAPI,您可以使用 $_SERVER["HTTP_REFERER"]

      【讨论】:

        【解决方案5】:
        <?php
          echo $_SERVER['HTTP_REFERER'];
        ?>
        

        上面的代码有效!然而,我的许多学生一开始很难理解$_SERVER['HTTP_REFERER'] 要求来自链接

        我给他们下面的(测试)代码(或“网页”)来演示。上面的代码在底部。

        显示-referer.php

        <?php
          if ( isset( $_SERVER['HTTP_REFERER'] ) ) {
            $referer = $_SERVER['HTTP_REFERER'];
          } else {
            $referer = 'No Link - No Referer - Direct URL Entry';
          }
          echo $referer;
        ?>
        
        <p>See the referer in action
          <a href="show-referer.php">from this page!</a>
        </p>
        
        <?php
          echo $_SERVER['HTTP_REFERER'];
        ?>
        

        当您单击链接时,show-referer.php 页面会链接到自身,这会导致浏览器生成 HTTP_REFERER。

        【讨论】:

          【解决方案6】:
          $ref = $_SERVER['HTTP_REFERER'];
          

          相关手册页:http://php.net/manual/en/reserved.variables.server.php

          【讨论】:

            【解决方案7】:

            如果您计算所有这些答案,您最终会得到如下结果:

            <?php
            if isset($_SERVER['HTTP_REFERER']) {
                $ref = $_SERVER['HTTP_REFERER'];
            }
            else {
                $ref = "Direct Entry";
            }
            ?>
            

            【讨论】:

              【解决方案8】:

              再次阅读http://php.net/manual/en/reserved.variables.server.php: 使用 HTTP_REFERER 有一条注释:

              将用户代理引向当前页面的页面地址(如果有)。这是由用户代理设置的。不是所有的用户代理都会设置这个,有些提供修改 HTTP_REFERER 作为一个特性的能力。简而言之,它不能真正被信任

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2012-01-31
                • 2017-08-07
                • 1970-01-01
                • 2010-12-24
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多