如何全面测试链接?

时间:2014-02-17 22:08:07

标签: php hyperlink

我在php的mySQL数据库中实现了一个非常简单的链接表,我想到了这个想法:在所有存储的链接中放置一个运行测试的“test”按钮。

例如:

http://www.somebodysite.com/somesubdir/somefile.php?id=1

这是一个非常基本的链接,即便如此,可能会发生很多错误:

  • www.somebodysite不再可用,他们没有支付账单
  • somesubdir已删除
  • somefile.php已重命名
  • id已从数据库中删除

我想,很多东西都无法远程检查,但其他人可以。我能走多远?我可以远程验证哪些链接元素?

1 个答案:

答案 0 :(得分:3)

对于前三项,您可以使用get_headers()功能并检查,如果响应代码为HTTP/1.1 200 OK

$response = get_headers('http://www.somebodysite.com/somesubdir/somefile.php?id=1');

$validCodes = array(
   'HTTP/1.1 200 OK',
   'HTTP/1.1 301 Moved Permanently',
   'HTTP/1.1 307 Temporary Redirect'
   // add more codes as you want
);

if (in_array($response[0], $validCodes))
{
   // It's ok
}
else
{
   // Something is wrong
}

但要检查,如果从数据库中删除了给定的id,您必须知道somebodysite.com的所有者如何告诉您某些项目已被删除。如果你知道页面上显示的是哪个字符串有已删除的项目,只需加载它并查找它(stream_get_contents()在这里可能会有所帮助)。 这是一个非常基本的例子,因为我对常规表达不太熟悉:

$stream = fopen('http://www.somebodysite.com/somesubdir/somefile.php?id=1', 'r');
$pageSource = stream_get_contents($stream);

$isDeletedString = 'removed from database';

$isDeleted = strpos($pageSource, $isDeletedString);

if ($isDeleted === false)
{
   // Still there
}
else
{
   // Item was deleted
}