sjaakp/yii2-linkchecker

Yii2 链接检查扩展

安装: 2

依赖: 0

建议者: 0

安全性: 0

星星: 3

关注者: 2

分支: 0

开放问题: 0

类型:yii2-extension

1.0.1 2024-06-29 12:43 UTC

This package is auto-updated.

Last update: 2024-08-29 13:02:04 UTC


README

使用 Yii2 PHP 框架扫描链接错误

Latest Stable Version Total Downloads License

链接检查器 是为 Yii 2.0 PHP 框架设计的模块。它可以检查网站数据库中存储的所有链接和图片源。

安装

使用 Composer 以常规方式安装 yii2-linkchecker。将以下内容添加到您的 composer.json 文件的 require 部分

"sjaakp/yii2-linkchecker": "*"

或者运行

composer require sjaakp/yii2-linkchecker

您也可以通过 下载 ZIP 格式的源代码 来手动安装 yii2-linkchecker

模块

链接检查器 是 Yii2 框架中的一个 模块。它必须在主配置文件中进行配置,通常在 config 目录中命名为 web.phpmain.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(hrefsrcsrcset 的值),将它们存储在其数据库表中,并尝试访问它们。这个过程可能需要一些时间,严重依赖于 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 是一个 arrayarray,描述了 链接检查器 应该查找 URL 的位置。它们具有以下字段

    • modelActiveRecord 的完全限定类名。它也可以是表名。
    • htmlAttributes:一个或多个(stringarray)包含 HTML 的属性的名称。 链接检查器 将提取所有 hrefsrcsrcset 中的 URL。默认:[ ](空数组)。
    • urlAttributes:一个或多个(stringarray)包含 URL 的属性的名称。默认:[ ](空数组)。
    • 模式:指示 Linkchecker 查找绝对('abs',默认),相对('rel')URL,或两者都查找('both')。

其他选项

Linkchecker 模块还有几个其他选项

  • greenlistarray,包含 Linkchecker 将忽略的 URL。这些可以是文字字符串,也可以是(PCRE)没有定界的正则表达式。默认:[ ](空数组)。
  • maxRequestsint,同时处理的请求(访问尝试)的最大数量。这可以降低以节省 CPU 循环。默认:40
  • timeoutint,请求的超时时间(毫秒)。默认:3000
  • curlOptionsarray,要在 Curl 请求中使用的额外选项。有很多这样的选项。请谨慎使用此选项(或者更确切地说,尽量不要使用)。默认:[ ](空数组)。
  • tableNamestringLinkchecker 数据库表的名称。默认情况下,表的名称为 'linkchecker'

HTTP 错误

请注意,Linkchecker 报告的所有错误可能并不都是严重的。由于几个原因,网站可能会在实际上运行正常的情况下报告 400 Bad Request403 Forbidden。例如,Spotify 总是似乎以 400 Bad Request 响应。

对于重定向链接来说,这一点更是如此。通常,302 Found 是完全可以接受的。301 Moved Permanently301 TLS Redirect 可能是更改存储 URL 的好理由(通常只是将协议从 http 更改为 https),但也有例外。

相反的情况也是真的。收到 200 OK 并不总是真的意味着一切正常。例如,YouTube 总是报告 200 OK,即使请求的视频不存在。