Php 如何全面测试链接?

Php 如何全面测试链接?,php,hyperlink,Php,Hyperlink,我用php在mySQL数据库中实现了一个非常简单的链接表,我想到了这个想法:在存储的所有链接中放置一个“test”按钮来运行测试 例如: http://www.somebodysite.com/somesubdir/somefile.php?id=1 这是一个非常基本的链接,即使如此,也可能会出现很多错误: www.somebodysite不再可用,他们没有支付账单 删除了一些子文件夹 somefile.php被重命名 id已从数据库中删除 我想,很多事情是无法远程检查的,但其他事情可以。

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

例如:

http://www.somebodysite.com/somesubdir/somefile.php?id=1
这是一个非常基本的链接,即使如此,也可能会出现很多错误:

  • www.somebodysite不再可用,他们没有支付账单
  • 删除了一些子文件夹
  • somefile.php被重命名
  • id已从数据库中删除

我想,很多事情是无法远程检查的,但其他事情可以。我能走多远?我可以远程验证哪些链接元素?

对于前三项,您可以使用函数并检查响应代码是否为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 = 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
}

对于前三项,您可以使用函数并检查响应代码是否为
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 = 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
}

对于前三项,您可以使用函数并检查响应代码是否为
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 = 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
}

对于前三项,您可以使用函数并检查响应代码是否为
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 = 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
}


执行HTTP GET并检查返回的状态代码。检查是否返回404?@crush:“执行HTTP GET”-将
GET
替换为
HEAD
…我知道某些Drupal模块(如
Link Checker
&
Web Links
)可能存在重复,有些模块做得比其他模块好。不过,大多数人只会在网站的链接上使用,除非你是谷歌,否则这是不实用的。不确定他们是如何做到的,但重点是这是可能的。执行HTTP GET并检查返回的状态代码。检查是否返回404?@crush:“执行HTTP GET”-将
GET
替换为
HEAD
…我知道某些Drupal模块可能重复,如
Link Checker
Web Links
,执行此操作,有些人比其他人好。不过,大多数人只会在网站的链接上使用,除非你是谷歌,否则这是不实用的。不确定他们是如何做到的,但重点是这是可能的。执行HTTP GET并检查返回的状态代码。检查是否返回404?@crush:“执行HTTP GET”-将
GET
替换为
HEAD
…我知道某些Drupal模块可能重复,如
Link Checker
Web Links
,执行此操作,有些人比其他人好。不过,大多数人只会在网站的链接上使用,除非你是谷歌,否则这是不实用的。不确定他们是如何做到的,但重点是这是可能的。执行HTTP GET并检查返回的状态代码。检查是否返回404?@crush:“执行HTTP GET”-将
GET
替换为
HEAD
…我知道某些Drupal模块可能重复,如
Link Checker
Web Links
,执行此操作,有些人比其他人好。不过,大多数人只会在网站的链接上使用,除非你是谷歌,否则这是不实用的。不确定他们是如何做到的,但重点是这是可能的。比如3xx,它们是正确的链接,但你被重定向了,或者甚至是5xx,它们是正确的,但有一个服务器错误?当然,你可以用正确的状态代码创建数组,并使用数组中的
来检查它。我认为这是一个开始。我将完成脚本并开始一些测试。我可能会分割查询并只测试根,而不是子目录,等等@Pavel:我认为get_headers是答案,而不是使用curl作为另一个类似的帖子。然而,200不是唯一的好答案,高于400意味着链接有很好的机会是正确的。所以我认为你应该在你的答案中加上这个。谢谢!我刚刚更新了我的原始帖子,以便能够检查多种状态。你可以很容易地添加你想要的。比如3xx,它是正确的链接,但是你被重定向了,或者甚至是5xx,它是正确的,但是有一个服务器错误?当然,你可以用正确的状态代码创建数组,并用数组中的
来检查它。我认为这是一个开始。我将完成脚本并开始一些测试。我可能会分割查询并只测试根,而不是子目录,等等@Pavel:我认为get_headers是答案,而不是使用curl作为另一个类似的帖子。然而,200不是唯一的好答案,高于400意味着链接有很好的机会是正确的。所以我认为你应该在你的答案中加上这个。谢谢!我刚刚更新了我的原始帖子,以便能够检查多种状态。你可以很容易地添加你想要的。比如3xx,它是正确的链接,但是你被重定向了,或者甚至是5xx,它是正确的,但是有一个服务器错误。当然,你可以用正确的状态代码创建数组,并用数组中的
来检查它。我认为这是一个错误