2012-07-25 19 views
2

如何获得真正的URL尽快?我需要在一个脚本中检查大量的URL(最长执行时间 - 30秒)。使用PHP获取重定向URL的最快方式

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; 
} 

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

+1

你能澄清吗? “获取真实的URL”=获取浏览器中当前页面的URL?你不能只使用$ _SERVER ['PHP_SELF']或其中一个变量吗? – Eric 2012-07-25 07:10:13

+0

这不会比没有使用多个进程的速度更快 – Hubro 2012-07-25 07:10:30

+0

@Eric:我认为他的意思是检查URL是否重定向到任何地方,然后返回该网址 – Hubro 2012-07-25 07:10:59

回答

1

你可以使用curl“多”的功能,它允许你进行多次请求,而不必自己管理多个进程同时进行。

PHP documentation for curl_multi_init()有一些基本的例子。 另一个教程可用here。另外,如果PHP的最大执行时间是唯一阻止你的事情,并且你实际上并不需要如果它花费的时间超过30秒,你可以在每次迭代循环时总是调用set_time_limit()

0

尝试这样的事情,从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; 
} 
?> 
+0

这不是我要找的。我想在重定向后获取网址。 – Jason 2012-07-25 07:21:07

1

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