【问题标题】:PHP Redirect Within website网站内的 PHP 重定向
【发布时间】:2012-03-08 07:05:38
【问题描述】:

我连续 3 天一直在尝试此代码,直到某个时间(分钟或秒),但无法解决问题。

我的目标是将访问者重定向到从文本文件中选择的 10 个随机 URL。用户会在一段时间内看到某个页面,然后再次重定向到另一个页面,他将被重定向到的页面数量是完全随机的。

问题:

问题是访问者没有被重定向到从文本文件中随机选择的任何其他页面,而只是刷新页面......但我想将他重定向到文本文件中的其他页面......希望你们现在明白我的意思了。

编辑:发现问题。实际上 $rand_link 的值是 NULL .. { [0]=> NULL } 不知道为什么....任何解决方案?检查了“BBnormalLinks.txt”文件的权限,并且该文件肯定有一些链接,因为我刚刚检查了它..

谢谢,

代码如下:

<?php // Generate Random Nubmers.. 2 ********
            $numbers2 = range(13,70);

            shuffle($numbers2);

            for ($j=0;$j<1;$j++)
            {
            $numbers2[$j];
            }
                $seconds = numbers2[0];

            //////// For Random URL of Site
            $links = file('BBnormalLinks.txt');
        $rand_link = $links[ mt_rand(0, count($links) - 1) ];                   

                header("refresh:". $seconds .";url=". $rand_link); ?>

【问题讨论】:

  • 这个旋转木马的意义何在?
  • 在对它进行任何操作之前,您是否尝试过调试 $rand_link 的值?另一方面,您为什么要在 $numbers2 似乎与您的问题没有任何关系的情况下包含这些行?
  • 你能告诉我们数组$links的键和值吗?
  • @Shrapnel:哈哈! :P 我正在尝试使用它来构建一些东西......
  • @Farray:我放了 2 来测试它。无论如何,我现在正在编辑它并将 2 替换为 "$numbers2[0]" 它实际上是一个随机数生成器。希望你得到我。

标签: php wordpress redirect refresh


【解决方案1】:

语法是正确的,但一些可能导致这种情况的指针是

  1. 在通过标头之前已经输出了一些文本。
  2. 没有生成随机页面,因此最终会一次又一次地刷新同一页面。

我有一种非常强烈的感觉,您的 $rand_link 返回空白或 null。


更新:

经过几次讨论,问题又是邪恶的path

$links = file('patotofile\BBnormalLinks.txt');

作为baburao113,引用

我不得不将该文件移动到 wordpress 主题文件夹,哈哈!问题已解决:)

【讨论】:

    【解决方案2】:

    在不知道 'BBnormalLinks.txt' 的内容或 $rand_link 的最终值的情况下,很难准确地说出哪里出了问题。

    您对file()mt_rand() 的使用似乎是正确的,尽管您没有采取任何措施来确保您获得的是有效的网址。

    这纯粹是猜测,但我怀疑您没有正确配置 PHP 以显示错误。如果文件加载失败,$links 将有一个空值进入倒数第二行。然后,您将尝试访问空数组的元素 0 并接收一个空值。这将导致 header('refresh:2;url=') 并且您的页面将简单地每 2 秒刷新一次。

    【讨论】:

    • 'BBnormalLinks.txt' 完全没问题,我可以保证。它只有 10 个 URL。我自己把它们写下来了。当我回显“$rand_link”时,它会在页面上打印 url。所以这就是我现在拉头发的原因。
    • @baburao113 由于您已经解决此问题 3 天,因此您不应该确信您的代码的任何部分都很好。无论如何,请再次阅读我的答案。我的建议是您没有正确加载文件。调试此问题的一种方法是注释掉您的标题行并输入 echo $rand_link 只是为了验证 URL 是否从您的文件中正确加载。
    • 我是无语的家伙..我说我已经这样做了......请阅读我的最后评论:\
    • @baburao113 老实说,在您向我保证您的文件很好之后,我并没有过多关注您的其余评论。如果您已经采取步骤来调试您的问题,您应该详细说明问题中的步骤和结果。有很多人会帮助你,但你让事情变得困难。
    • 好吧伙计...我刚刚做了“var_dump($rand_link);”发现所有的值都是 NULL NULL NULL NULL ... 。 ... ..
    【解决方案3】:

    根据我对刷新标头的了解,它似乎不是最可靠的东西。 (我猜不是所有的浏览器都会响应它。)由于您正在显示内容,至少几秒钟,您可以尝试在 JavaScript 中的 window.setTimeout 中使用 window.location。所以像:

    $content = '<script type="text/javascript">window.setTimeout("window.location=\''.$rand_link.'\';", '.($seconds*1000).');</script>';
    

    【讨论】:

    • 谢谢老兄...在搜索了一种仅使用 php 的方法并得出结论认为这是不可能的之后,您的解决方案是我最后的选择。
    • 很高兴我能帮上忙。你是说你放弃了刷新标题?
    • 是的,我放弃了刷新标头。我不知道为什么当我使用您的代码在空文件中进行测试时它可以工作,而当我在完整代码中使用它时,它除非我将脚本中的 PHP 变量(如 $rand_link 更改为 google.com 并将 $seconds 更改为 5)否则将无法工作。我的完整代码中还有另一个倒数计时器。一个在您在此处共享的上述代码中。另一个在完整的代码中。我不能在这里分享完整的代码。
    • 听起来好像在构建“内容”时没有设置变量。查看源代码并查找setTimeout 行以查看变量是否已将合法的内容传递给内容。您可以根据需要设置任意多个超时。可能会有一些 javascript 杀死所有超时,但我对此表示怀疑(但请继续检查)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-19
    • 1970-01-01
    • 2020-10-16
    • 1970-01-01
    相关资源
    最近更新 更多