首页
壁纸
留言
挚爱
友链
关于
更多
统计
Search
1
自动化推送每日60S新闻
57 阅读
2
我的开始
51 阅读
3
过来听会歌吧
47 阅读
4
天气每日推送
42 阅读
5
数据结构之队列
35 阅读
自动化
Java
计算机基础知识
数据结构
操作系统
计算机组成原理
计算机网络
typecho
无线电
就爱瞎折腾
其他
树洞
登录
Search
标签搜索
数据结构
自动化
计算机组成原理
树洞
typecho
网易云
音乐
折腾
存储系统
进制转换
编码
数值
MathJax
LaTeX
KaTeX
听歌
队列
青龙面板
冉冉升起的ShallGoing
累计撰写
20
篇文章
累计收到
1
条评论
首页
栏目
自动化
Java
计算机基础知识
数据结构
操作系统
计算机组成原理
计算机网络
typecho
无线电
就爱瞎折腾
其他
树洞
页面
壁纸
留言
挚爱
友链
关于
统计
搜索到
3
篇
分类为
typecho
的文章
2024-08-08
尝试解决typecho的文章未收录但却显示已收录的问题
{alert type="warning"}测试还在进行,还未成功{/alert}分析/* 查询是否收录 已测试 √ */ function _getRecord($self) { $self->response->setStatus(200); site=site = site=self->request->site; $encryption = md5(mt_rand(1655, 100860065) . time()); $baiduSite = "https://www.baidu.com/s?ie=utf-8&newi=1&mod=1&isid={$encryption}&wd={$site}&rsv_spt=1&rsv_iqid={$encryption}&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=0&rsv_dl=ib&rsv_sug3=2&rsv_sug1=1&rsv_sug7=001&rsv_n=2&rsv_btype=i&inputT=3083&rsv_sug4=3220&rsv_sug=9&rsv_sid=32818_1460_33042_33060_31660_33099_33101_32961_26350_22159&_ss=1&clist=&hsug=&f4s=1&csor=38&_cr1=32951"; $ip = mt_rand(0, 255) . '.' . mt_rand(0, 255) . '.' . mt_rand(0, 255) . '.' . mt_rand(0, 255); $header[] = "accept-encoding: gzip, deflate"; $header[] = "accept-language: en-US,en;q=0.8"; header[]="CLIENT−IP:".header[] = "CLIENT-IP:" . header[]="CLIENT−IP:".ip; header[]="X−FORWARDED−FOR:".header[] = "X-FORWARDED-FOR:" . header[]="X−FORWARDED−FOR:".ip; $header[] = "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"; $ch = curl_init(); $ch = curl_init(); curl_setopt(ch,CURLOPTURL,ch, CURLOPT_URL, ch,CURLOPTURL,baiduSite); curl_setopt(ch,CURLOPTHTTPHEADER,ch, CURLOPT_HTTPHEADER, ch,CURLOPTHTTPHEADER,header); curl_setopt($ch, CURLOPT_REFERER, "https://www.baidu.com/s?ie=UTF-8&wd={$site}"); curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_ENCODING, 'gzip,deflate'); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($ch, CURLOPT_TIMEOUT, 5); $output = curl_exec($ch); curl_close($ch); $res = str_replace([' ', "\n", "\r"], '', $output); if (strpos($res, "抱歉,没有找到与") || strpos($res, "找到相关结果约0个") || strpos($res, "没有找到该URL") || strpos($res, "抱歉没有找到")) { $self->response->throwJson(array("data" => "未收录")); } else { $self->response->throwJson(array("data" => "已收录")); } }这段代码是一个用于检查网站是否被百度收录的PHP函数 _getRecord。它通过模拟浏览器请求访问百度搜索页面,并解析返回的HTML内容来判断目标网站是否已经被百度收录。代码详解1. 函数声明和设置响应状态function _getRecord($self) { $self->response->setStatus(200);函数 _getRecord 接收一个参数 $self,通常是一个包含响应和请求相关信息的对象(可能是某个框架中的对象)。setStatus(200) 设置HTTP响应状态码为200,表示请求成功。2. 构造查询URL和请求头 $site = $self->request->site; $encryption = md5(mt_rand(1655, 100860065) . time()); $baiduSite = "https://www.baidu.com/s?ie=utf-8&newi=1&mod=1&isid={$encryption}&wd={$site}&rsv_spt=1&rsv_iqid={$encryption}&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=0&rsv_dl=ib&rsv_sug3=2&rsv_sug1=1&rsv_sug7=001&rsv_n=2&rsv_btype=i&inputT=3083&rsv_sug4=3220&rsv_sug=9&rsv_sid=32818_1460_33042_33060_31660_33099_33101_32961_26350_22159&_ss=1&clist=&hsug=&f4s=1&csor=38&_cr1=32951"; $ip = mt_rand(0, 255) . '.' . mt_rand(0, 255) . '.' . mt_rand(0, 255) . '.' . mt_rand(0, 255); $header[] = "accept-encoding: gzip, deflate"; $header[] = "accept-language: en-US,en;q=0.8"; $header[] = "CLIENT-IP:" . $ip; $header[] = "X-FORWARDED-FOR:" . $ip; $header[] = "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9";$site: 从请求对象 $self->request 中获取用户传递的站点URL,用于查询是否被收录。$encryption: 生成一个随机的MD5加密字符串,用于伪装请求的唯一性。$baiduSite: 拼接百度的查询URL,其中 wd={$site} 用于指定要查询的网站,其他参数用来模拟真实的搜索请求。$ip: 生成一个随机的IP地址,用于伪装请求的来源IP,防止被百度识别为机器请求。$header: 构造请求头,用于模拟真实用户的请求。包括 accept-encoding、accept-language、CLIENT-IP、X-FORWARDED-FOR 等字段。3. 初始化并发送CURL请求 $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $baiduSite); curl_setopt($ch, CURLOPT_HTTPHEADER, $header); curl_setopt($ch, CURLOPT_REFERER, "https://www.baidu.com/s?ie=UTF-8&wd={$site}"); curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_ENCODING, 'gzip,deflate'); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($ch, CURLOPT_TIMEOUT, 5); $output = curl_exec($ch); curl_close($ch);curl_init(): 初始化CURL会话。curl_setopt($ch, CURLOPT_URL, $baiduSite): 设置CURL请求的URL为百度查询链接。curl_setopt($ch, CURLOPT_HTTPHEADER, $header): 设置请求头,模拟真实请求。curl_setopt($ch, CURLOPT_REFERER, ...): 设置请求的来源页面(即伪装成从百度搜索页面点击进入)。curl_setopt($ch, CURLOPT_USERAGENT, ...): 设置用户代理(浏览器标识),模拟真实用户。curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1): 设置为返回请求结果,而不是直接输出。curl_setopt($ch, CURLOPT_ENCODING, 'gzip,deflate'): 设置CURL自动解压Gzip或Deflate编码的内容。curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE): 禁用SSL证书验证(用于处理HTTPS请求)。curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE): 禁用SSL主机名验证。curl_setopt($ch, CURLOPT_TIMEOUT, 5): 设置请求超时时间为5秒。$output = curl_exec($ch): 执行CURL请求,并将返回的HTML内容赋值给 $output。curl_close($ch): 关闭CURL会话。4. 解析返回结果并判断是否收录 $res = str_replace([' ', "\n", "\r"], '', $output); if (strpos($res, "抱歉,没有找到与") || strpos($res, "找到相关结果约0个") || strpos($res, "没有找到该URL") || strpos($res, "抱歉没有找到")) { $self->response->throwJson(array("data" => "未收录")); } else { $self->response->throwJson(array("data" => "已收录")); } }$res = str_replace([' ', "\n", "\r'], '', $output);: 将返回的HTML内容中的空格、换行符和回车符去除,得到更干净的字符串,方便进行字符串匹配。if (strpos($res, ...) || ...): 检查返回的内容中是否包含以下字符串:"抱歉,没有找到与""找到相关结果约0个""没有找到该URL""抱歉没有找到"这些字符串通常表示百度未收录目标网站。$self->response->throwJson(array("data" => "未收录"));: 如果检测到上述字符串之一,则返回JSON格式的响应,表示网站未被收录。$self->response->throwJson(array("data" => "已收录"));: 否则,返回JSON响应,表示网站已被收录。从调试输出的信息来看,API 返回的内容是一个包含验证码的链接,而不是我们预期的搜索结果。具体的输出是:<a href="https://wappass.baidu.com/static/captcha/tuxing.html?...">Found</a>这个链接指向百度的图形验证码页面,说明百度检测到了我们的请求,并认为这可能是自动化行为,因此要求进行验证码验证。原因分析:百度为了防止滥用或频繁的自动化查询请求,使用了图形验证码来验证请求的真实性。我们的代码通过 cURL 发送请求,但是由于频繁或异常的访问模式,触发了百度的安全机制,导致你获取到的不是搜索结果,而是一个要求验证码验证的页面。解决方案:还没想到,再说吧
2024年08月08日
12 阅读
0 评论
0 点赞
2024-08-08
解决typecho搜索文章不显示关键字的bug✅
前言点击分类的时候不显示关键字“搜索到1篇与 的文章”还挺离谱。关键字不显示。一顿查找,找到搜索是在archive.php里面<span>搜索到</span> <span class="muted"><?php echo $this->getTotal(); ?></span> <span>篇与</span> <span class="muted ellipsis"><?php echo $this->_keywords; ?></span> <span>的结果</span>关键字是空的,再一顿翻看,搜索也是,解决问题<span>搜索到</span> <span class="muted"><?php echo $this->getTotal(); ?></span> <span>篇</span><span>搜索到</span>: 显示固定文本“搜索到”。<span class="muted"><?php echo $this->getTotal(); ?></span>: 显示搜索结果或文章的总数。$this->getTotal() 是一个方法,它返回当前文章列表的总数,使用 muted 类来控制这个数字的样式。<span>篇</span>: 显示固定文本“篇”,用于表示文章数量的单位。动态生成标题$sp = '<span class="muted ellipsis"> %s </span>'; $this->archiveTitle(array( 'category' => '分类为' . $sp . '的文章', 'search' => '包含关键字' . $sp . '的文章', 'tag' => '标签为' . $sp . '的文章', 'author' => $sp . '发布的文章' ), '', '');$sp: 定义一个格式化的字符串,其中包含两个类 muted 和 ellipsis,并在中间留有 %s 作为占位符,用于替换成分类名、关键词、标签名或作者名。$this->archiveTitle(...): 根据当前的归档类型(如分类、搜索、标签或作者)动态生成标题。'category' => '分类为'.$sp.'的文章': 如果是按分类查看文章,则生成类似“分类为 [分类名] 的文章”的标题。'search' => '包含关键字'.$sp.'的文章': 如果是搜索文章,则生成类似“包含关键字 [搜索词] 的文章”的标题。'tag' => '标签为'.$sp.'的文章': 如果是按标签查看文章,则生成类似“标签为 [标签名] 的文章”的标题。'author' => $sp.'发布的文章': 如果是按作者查看文章,则生成类似“[作者名] 发布的文章”的标题。用法示例假设你在某个分类页面上,用户选择了“科技”分类,这段代码将生成如下内容:<span>搜索到</span> <span class="muted">10</span> <span>篇</span> <span class="muted ellipsis"> 科技 </span>分类的文章在这个示例中,$this->getTotal() 返回了 10,表示在“科技”分类中共有10篇文章,最终会显示为“搜索到 10 篇 科技 分类的文章”。操作将<span>搜索到</span> <span class="muted"><?php echo $this->getTotal(); ?></span> <span>篇与</span> <span class="muted ellipsis"><?php echo $this->_keywords; ?></span> <span>的结果</span>替换成<span>搜索到</span> <span class="muted"><?php echo $this->getTotal(); ?></span> <span>篇</span> <?php $sp='<span class="muted ellipsis"> %s </span>'; $this->archiveTitle(array( 'category' => '分类为'.$sp.'的文章', 'search' => '包含关键字'.$sp.'的文章', 'tag' => '标签为'.$sp.'的文章', 'author' => $sp.'发布的文章') , '', '');muted: 可能会用较浅的颜色或更淡的文本颜色来显示数字和其他信息。ellipsis: 可能用于文本溢出时添加省略号,通常用于长标题的处理。快去试试吧。文章参考GitHub用户cnhongv的提交https://github.com/HaoOuBa/Joe/pull/91
2024年08月08日
13 阅读
0 评论
1 点赞
2024-07-28
关于Joe主题在function.php第261行的报错处理
先看一下报错是这样的:首先找到Joe主题的文本位置,然后再打开core文件夹下的function.php文件对第261行进行修改原来报错的代码为:/* 获取父级评论 */ function _getParentReply($parent) { if ($parent !== "0") { $db = Typecho_Db::get(); $commentInfo = $db->fetchRow($db->select('author')->from('table.comments')->where('coid = ?', $parent)); echo '<div class="parent"><span style="vertical-align: 1px;">@</span> ' . $commentInfo['author'] . '</div>'; } }我们需要给他修改修改代码如下:/* 获取父级评论 */ function _getParentReply($parent) { if ($parent !== "0") { $db = Typecho_Db::get(); $commentInfo = $db->fetchRow($db->select('author')->from('table.comments')->where('coid = ?', $parent)); if ($commentInfo) { echo '<div class="parent"><span style="vertical-align: 1px;">@</span> ' . htmlspecialchars($commentInfo['author'], ENT_QUOTES, 'UTF-8') . '</div>'; } // 如果查询没有返回结果,则什么也不做 } } 关键点解释:检查数据库操作结果:1.if ($commentInfo):检查 fetchRow 的结果是否为 null。只有在查询成功并且返回了结果时,才会访问 commentInfo['author'] 并输出父级评论。2.不显示未知作者:如果查询没有返回结果,则不输出任何内容。快去试试吧~
2024年07月28日
19 阅读
0 评论
2 点赞