I';我正在用php编写一个链接检查器,我可以';当站点显示类似';此页面可以';找不到';
我正在制作一个链接检查工具,以避免在我们的网站内容中出现断开的链接,当页面不存在或无法加载时,它会工作——除非外部网站将其替换为一个屏幕,显示类似“此页面似乎不存在”的内容。从我们的菜单中搜索您正在查找的内容…'。 除了此工具的html/css/js代码外,下面是检查链接的主要PHP代码I';我正在用php编写一个链接检查器,我可以';当站点显示类似';此页面可以';找不到';,php,regex,http-headers,Php,Regex,Http Headers,我正在制作一个链接检查工具,以避免在我们的网站内容中出现断开的链接,当页面不存在或无法加载时,它会工作——除非外部网站将其替换为一个屏幕,显示类似“此页面似乎不存在”的内容。从我们的菜单中搜索您正在查找的内容…'。 除了此工具的html/css/js代码外,下面是检查链接的主要PHP代码 $headers = get_headers($url); $headers = (is_array($headers)) ? implode( "\n ", $headers) : $he
$headers = get_headers($url);
$headers = (is_array($headers)) ? implode( "\n ", $headers) : $headers;
$exists = (bool)preg_match('#^HTTP/.*\s+[(200|301|302)]+\s#i', $headers);
$status = (is_array($headers)) ? $headers[0] : $headers;
然后js使用这些信息,包括$status,但当外部站点显示“未找到”屏幕时,它不会返回错误代码(例如
http://www.drdansiegel.com/resources/healthy_mind_platter
)。在解析到404之前,您将返回重定向。我会颠倒你的逻辑,检查你是否有404
或400
的密码
$notexists = (bool)preg_match('#^HTTP/.*\s40[04]\s#mi', $headers);
另外,您应该使用m
修饰符,以便前导锚点匹配每一行,而不是整个字符串
此外,请注意,字符类是一个字符列表,您不能在其中进行分组<代码>[(200 | 301 | 302)]说a(
,2
,0
,0
(再次),,
,3
,0
(再次)等都是允许的。你可以写成(200 | 301 | 302)
如果您想将200
、301
或302
作为允许的字符。您可以使用字符类作为重定向状态代码上的最后一个整数(并且应该将7
和8
添加到其中,就好像它们也是有效的重定向一样)。因此它可以是(200 | 30[1278])
下面是示例链接中包含的$headers
:
Array
(
[0] => HTTP/1.1 301 Moved Permanently
[1] => Server: nginx
[2] => Date: Sat, 15 May 2021 01:57:44 GMT
[3] => Content-Type: text/html
[4] => Content-Length: 162
[5] => Connection: close
[6] => Location: https://www.drdansiegel.com/resources/healthy_mind_platter
[7] => HTTP/1.1 301 Moved Permanently
[8] => Server: nginx
[9] => Date: Sat, 15 May 2021 01:57:45 GMT
[10] => Content-Type: text/html; charset=UTF-8
[11] => Content-Length: 0
[12] => Connection: close
[13] => Expires: Sat, 15 May 2021 02:57:45 GMT
[14] => Cache-Control: max-age=3600
[15] => X-Redirect-By: WordPress
[16] => Location: https://drdansiegel.com/resources/healthy_mind_platter
[17] => HTTP/1.1 404 Not Found
[18] => Server: nginx
[19] => Date: Sat, 15 May 2021 01:57:46 GMT
[20] => Content-Type: text/html; charset=UTF-8
[21] => Connection: close
[22] => Vary: Accept-Encoding
[23] => Expires: Wed, 11 Jan 1984 05:00:00 GMT
[24] => Cache-Control: no-cache, must-revalidate, max-age=0
[25] => Link: <https://drdansiegel.com/wp-json/>; rel="https://api.w.org/"
)
数组
(
[0]=>HTTP/1.1 301已永久移动
[1] =>服务器:nginx
[2] =>日期:2021年5月15日星期六01:57:44 GMT
[3] =>内容类型:文本/html
[4] =>内容长度:162
[5] =>连接:关闭
[6] =>位置:https://www.drdansiegel.com/resources/healthy_mind_platter
[7] =>HTTP/1.1 301永久移动
[8] =>服务器:nginx
[9] =>日期:2021年5月15日星期六01:57:45 GMT
[10] =>内容类型:文本/html;字符集=UTF-8
[11] =>内容长度:0
[12] =>连接:关闭
[13] =>到期时间:2021年5月15日星期六02:57:45 GMT
[14] =>缓存控制:最大年龄=3600
[15] =>X-Redirect-By:WordPress
[16] =>位置:https://drdansiegel.com/resources/healthy_mind_platter
[17] =>找不到HTTP/1.1 404
[18] =>服务器:nginx
[19] =>日期:2021年5月15日星期六01:57:46 GMT
[20] =>内容类型:文本/html;字符集=UTF-8
[21]=>连接:关闭
[22]=>变化:接受编码
[23]=>过期时间:1984年1月11日星期三格林威治标准时间05:00:00
[24]=>缓存控制:无缓存,必须重新验证,最大使用期限=0
[25]=>链接:;rel=”https://api.w.org/"
)
非常感谢您的帮助。我无法使用$notexists获取HTTP错误代码,但我使用了您的代码数组来循环,它成功了。