cms-manage/app/command/service/step/CheckTplCode.php

136 lines
4.7 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace app\command\service\step;
use think\facade\App;
class CheckTplCode
{
public static function run($taskData)
{
$analysis = [
'hn' => [
'status' => 1,
'msg' => []
],
'tags' => [
'status' => 1,
'msg' => []
],
'robots' => [
'status' => 1,
'msg' => 'robots.txt文件正确'
],
'sitemap' => [
'status' => 1,
'msg' => 'sitemap文件放置正确'
],
'urlLevel' => [
'status' => 1,
'msg' => []
],
'c404' => [
'status' => 1,
'msg' => '404文件放置正确'
]
];
// 目录层级
foreach ($taskData['cate'] as $vo) {
if ($vo['alias'] != '/' && !empty($vo['alias'])) {
$level = count(array_filter(explode('/', $vo['alias'])));
if ($level >= 3) {
$analysis['urlLevel']['status'] = 2;
$analysis['urlLevel']['msg'][] = $vo['title'] . '页面url层级太深达到了' . $level . '层';
}
}
}
// 404文件
$rootPath = App::getRootPath() . 'public';
if (!is_file($rootPath . '/system_file/hc_error/404.html')) {
$analysis['c404']['status'] = 2;
$analysis['c404']['msg'] = '未正确放置404文件';
}
$path = $rootPath . '/themes/website/' . $taskData['websiteId'] . '/' . $taskData['lang'] . '/' . $taskData['theme'];
if (!is_dir($path)) {
return $analysis;
}
$files = scandir($path);
foreach ($files as $value){
if($value != '.' && $value != '..' && is_file($path . '/' . $value)){
$html = file_get_contents($path . '/' . $value);
// 存在ajax
if (strstr($html, '$.ajax') !== false || strstr($html, '$.getJSON') !== false
|| strstr($html, '$.post') !== false) {
$analysis['tags']['status'] = 2;
$analysis['tags']['msg']['ajax'][] = $value . '页面有ajax异步请求建议更换。';
}
$html = \phpQuery::newDocumentHTML($html);
// 页面为vue.js编写
$html['script']->html('');
$html['noscript']->html('');
$vueJs = str_replace(PHP_EOL, '', trim(strip_tags($html)));
if (empty($vueJs)) {
$analysis['tags']['status'] = 2;
$analysis['tags']['msg']['vuejs'][] = $value . '页面是Vue.js编写无法收录';
}
// 检测h1数量
$h1 = $html["h1"];
if (count($h1) >= 2) {
$analysis['hn']['status'] = 2;
$analysis['hn']['msg']['h1'][] = $value . '有' . count($h1) . '个<h1>标签,数量过多。';
}
// 检测iframe框架
$iframe = $html["iframe"];
if (count($iframe) > 0) {
$analysis['tags']['status'] = 2;
$analysis['tags']['msg']['iframe'][] = $value . '页面存在iframe标签建议更换。';
}
// 检测flash技术
$flash = $html["object"];
if (count($flash) > 0) {
$analysis['tags']['status'] = 2;
$analysis['tags']['msg']['flash'][] = $value . '页面存在flash标签建议更换。';
}
// alt标签
$imgs = $html["img"];
foreach($imgs as $imgObj) {
if (empty(pq($imgObj)->attr('alt'))) {
$analysis['tags']['status'] = 2;
$analysis['tags']['msg']['alt'][] = $value . '页面img标签alt属性缺少或为空';
break;
}
}
// robots 文件
if (!is_file($rootPath . '/robots.txt')) {
$analysis['robots'] = [
'status' => 2,
'msg' => '未在正确放置robots.txt文件'
];
}
// sitemap
if (!is_file($rootPath . '/xml/' . $taskData['websiteId'] . '_sitemap.xml')) {
$analysis['sitemap'] = [
'status' => 2,
'msg' => '未正确放置sitemap.xml文件'
];
}
}
}
return $analysis;
}
}