【问题标题】:The fastest way to get redirect URL using PHP使用 PHP 获取重定向 URL 的最快方法
【发布时间】:2012-07-23 13:41:39
【问题描述】:

我怎样才能尽快得到真正的网址?我需要在单个脚本中检查大量 URL(最长执行时间 - 30 秒)。

CURL 解决方案需要太多时间。我发现了这样的东西:

function get_URL($url)
{
    $headers = @get_headers($url);
    $pattern = '/Location\s*:\s*(https?:[^;\s\n\r]+)/i';
    if ($locations = preg_grep($pattern, $headers))
    {
        preg_match($pattern, end($locations), $redirect);
        return $redirect[1];
    }
    return $url;
}

这似乎工作得更快。还有其他更快的方法吗?

【问题讨论】:

  • 你能澄清一下吗? “获取真实URL”=在浏览器中获取当前页面的URL?你不能只使用 $_SERVER['PHP_SELF'] 或其中一个变量吗?
  • 不使用多个进程不会比这更快
  • @Eric:我认为他的意思是检查 URL 是否重定向到任何地方,然后返回该 URL
  • 这不会有太大的区别,但是您可以通过在函数外部定义模式(始终保持不变)来加速您的函数,这样您就不会每次都重新定义变量。与找到最快的函数(我无能为力)相比,这将产生最小的差异。
  • 是的,我指的是重定向后的真实 URL。

标签: php url redirect curl


【解决方案1】:

$_SERVER['HTTP_REFERER'] 包含重定向到当前 URL 的上一个 URL。

【讨论】:

    【解决方案2】:

    您可以使用 CURL“多”功能,它允许您同时发出多个请求,而无需自己管理多个进程。

    PHP documentation for curl_multi_init() 有一些基本示例。 另一个教程可用here

    另外,如果 PHP 的最大执行时间是唯一阻止您的事情,并且您实际上不在乎它是否需要超过 30 秒,您可以随时在循环的每次迭代中调用 set_time_limit() .

    【讨论】:

      【解决方案3】:

      尝试这样的事情,来自here

      <?php
      function curPageURL() {
       $pageURL = 'http';
       if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";}
       $pageURL .= "://";
       if ($_SERVER["SERVER_PORT"] != "80") {
        $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
       } else {
        $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
       }
       return $pageURL;
      }
      ?>
      

      【讨论】:

      • 这不是我要找的。我想在重定向后获取 URL。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-09
      • 1970-01-01
      • 1970-01-01
      • 2016-08-06
      • 2018-07-13
      • 2016-11-14
      • 1970-01-01
      相关资源
      最近更新 更多