sjaakp / yii2-linkchecker
Yii2 链接检查扩展
Requires
- php: >=7.0
- ext-curl: *
- yiisoft/yii2: ~2.0.14
README
使用 Yii2 PHP 框架扫描链接错误
链接检查器 是为 Yii 2.0 PHP 框架设计的模块。它可以检查网站数据库中存储的所有链接和图片源。
安装
使用 Composer 以常规方式安装 yii2-linkchecker。将以下内容添加到您的 composer.json
文件的 require 部分
"sjaakp/yii2-linkchecker": "*"
或者运行
composer require sjaakp/yii2-linkchecker
您也可以通过 下载 ZIP 格式的源代码 来手动安装 yii2-linkchecker。
模块
链接检查器 是 Yii2 框架中的一个 模块。它必须在主配置文件中进行配置,通常在 config
目录中命名为 web.php
或 main.php
。将以下内容添加到配置数组中
<?php
// ...
'modules' => [
'linkchecker' => [
'class' => 'sjaakp\linkchecker\Module',
// several options
],
],
// ...
模块必须进行 引导。通过向应用程序配置数组中添加以下内容来实现
<php
// ...
'bootstrap' => [
'linkchecker',
]
// ...
配置文件中可能已经存在一个 bootstrap
属性;只需将 'linkchecker'
添加到其中。
重要:模块还必须在控制台配置(通常称为 console.php
)中以相同的方式进行设置。
控制台命令
为了完成安装,需要运行一个 控制台命令。它将为检查的 URL 创建一个数据库表
yii migrate
应用的迁移名为 sjaakp\linkchecker\migrations\m000000_000000_init
。
使用方法
安装后,链接检查器 在 www.example.com/linkchecker
上报告其发现。最初,显示的列表将是空的。页面有一个“扫描”按钮。点击它后,链接检查器 将收集所有 URL 链接和图片 URI(href
、src
和 srcset
的值),将它们存储在其数据库表中,并尝试访问它们。这个过程可能需要一些时间,严重依赖于 URL 的质量。在我的测试系统中,以高速互联网连接检查 400 多个 URL 通常花费不到 20 秒。
为了使其工作,必须指示 链接检查器 在哪里查找 URL。这涉及到设置模块的 source
选项。
假设我们有一个网站发布非常有趣的文章。它由两个模型构建
/**
* @property string $mainHtml // contains HTML with href's and src's
* @property string $asideHtml // likewise
* ... other attributes, like $title, $publicationDate ...
*/
class Article extends ActiveRecord
{
// ... Article methods and stuff ...
}
/**
* @property string $homepageUrl // contains pure URL
* ... other attributes, like $name, $birthday ...
*/
class Author extends ActiveRecord
{
// ... Author methods and stuff ...
}
我们可以指示 链接检查器 检查这两个类中的 URL,如下初始化模块
<?php
// ...
'modules' => [
'linkchecker' => [
'class' => 'sjaakp\linkchecker\Module',
'source' => [
[
'model' => 'app\models\Article',
'htmlAttributes' => [ 'mainHtml', 'asideHtml']
],
[
'model' => 'app\models\Author',
'urlAttributes' => 'homepageUrl'
],
]
// ... other options ...
],
],
// ...
-
source 是一个
array
的array
,描述了 链接检查器 应该查找 URL 的位置。它们具有以下字段- model:
ActiveRecord
的完全限定类名。它也可以是表名。 - htmlAttributes:一个或多个(
string
的array
)包含 HTML 的属性的名称。 链接检查器 将提取所有href
、src
和srcset
中的 URL。默认:[ ]
(空数组)。 - urlAttributes:一个或多个(
string
的array
)包含 URL 的属性的名称。默认:[ ]
(空数组)。 - 模式:指示 Linkchecker 查找绝对(
'abs'
,默认),相对('rel'
)URL,或两者都查找('both'
)。
- model:
其他选项
Linkchecker 模块还有几个其他选项
- greenlist:
array
,包含 Linkchecker 将忽略的 URL。这些可以是文字字符串,也可以是(PCRE)没有定界的正则表达式。默认:[ ]
(空数组)。 - maxRequests:
int
,同时处理的请求(访问尝试)的最大数量。这可以降低以节省 CPU 循环。默认:40
。 - timeout:
int
,请求的超时时间(毫秒)。默认:3000
。 - curlOptions:
array
,要在 Curl 请求中使用的额外选项。有很多这样的选项。请谨慎使用此选项(或者更确切地说,尽量不要使用)。默认:[ ]
(空数组)。 - tableName:
string
,Linkchecker 数据库表的名称。默认情况下,表的名称为'linkchecker'
。
HTTP 错误
请注意,Linkchecker 报告的所有错误可能并不都是严重的。由于几个原因,网站可能会在实际上运行正常的情况下报告 400 Bad Request
或 403 Forbidden
。例如,Spotify 总是似乎以 400 Bad Request
响应。
对于重定向链接来说,这一点更是如此。通常,302 Found
是完全可以接受的。301 Moved Permanently
或 301 TLS Redirect
可能是更改存储 URL 的好理由(通常只是将协议从 http
更改为 https
),但也有例外。
相反的情况也是真的。收到 200 OK
并不总是真的意味着一切正常。例如,YouTube 总是报告 200 OK
,即使请求的视频不存在。