递归网络 Link 在 PHP 中搜索
Recursive Web Link Search in PHP
我正在尝试使用 PHP 进行递归网络 link 搜索,但代码似乎不起作用。我收到超时错误。
function linksearch($url)
{
$text = file_get_contents($url);
if (!empty($text))
{
$res1 = preg_match_all("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",
$text,
$matches);
if ($res1)
{
foreach(array_unique($matches[0]) as $link)
{
linksearch($url);
}
}
else
{
// echo "No links found.";
}
}
}
你的函数中有一个永无止境的循环,因为你在函数内部再次调用了你的函数。
linksearch($url);
您需要一个条件来终止您的函数。这不是没有递归,因为在每次迭代中,输入都会改变并结束,直到出现某种情况。现在它一直都是一样的 - $url。
为什么不先将页面保存在本地,然后调整脚本以获取本地测试文件,而不必每次都 运行 进行远程调用。您不会从 file_get_contents() 之后的评估代码中得到超时错误,除非 HTML 文件非常大。
我正在尝试使用 PHP 进行递归网络 link 搜索,但代码似乎不起作用。我收到超时错误。
function linksearch($url)
{
$text = file_get_contents($url);
if (!empty($text))
{
$res1 = preg_match_all("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",
$text,
$matches);
if ($res1)
{
foreach(array_unique($matches[0]) as $link)
{
linksearch($url);
}
}
else
{
// echo "No links found.";
}
}
}
你的函数中有一个永无止境的循环,因为你在函数内部再次调用了你的函数。
linksearch($url);
您需要一个条件来终止您的函数。这不是没有递归,因为在每次迭代中,输入都会改变并结束,直到出现某种情况。现在它一直都是一样的 - $url。
为什么不先将页面保存在本地,然后调整脚本以获取本地测试文件,而不必每次都 运行 进行远程调用。您不会从 file_get_contents() 之后的评估代码中得到超时错误,除非 HTML 文件非常大。