首页 > 标签 > PHP

Waxy主题:Sitemap/网站地图功能介绍

什么是Sitemap/网站地图

这是一种方便搜索引擎蜘蛛爬取整个网站的列表,并且还可以提供有关网站的其他信息,如上次更新日期、Sitemap文件的更新频率等,供搜索引擎参考。

搜索引擎一般支持以下3种形式的Sitemap:

  • xml格式
  • 文本格式
  • Sitemap索引文件

xml格式

<!-- XML文件需以utf-8编码-->
<?xml version="1.0" encoding="utf-8"?>
<!--必填标签-->
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
    <!--必填标签,这是具体某一个链接的定义入口,每一条数据都要用<url>和</url>包含在里面,这是必须的 -->
    <url>
        <!--必填,URL链接地址,长度不得超过256字节-->
        <loc>http://www.example.com/yoursite.html</loc>
        <!--可省略,指定该链接的最后更新时间-->
        <lastmod>2020-10-17T15:43:00+08:00</lastmod>
        <!--可省略,指定页面更新频率,常用参数:always,hourly,daily,weekly,monthly,yearly,never -->
        <changefreq>daily</changefreq>
        <!--可省略,指定此链接相对于其他链接的优先权比值,取值范围0.0-1.0之间-->
        <priority>0.8</priority>
    </url>
    <url>
        <loc>http://www.example.com/yoursite2.html</loc>
        <lastmod>2020-10-17</lastmod>
        <changefreq>daily</changefreq>
        <priority>0.8</priority>
    </url>
</urlset>

NextCloud安装时数据库报错

NextCloud安装时使用MySQL报错。报错日志如下:

NextCloud安装时报错日志NextCloud安装时报错日志

错误:
An exception occurred while executing 'SELECT `uid`, `displayname` FROM `oc_users` WHERE `uid_lower` = ?' with params ["admin"]: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'nextcloud.oc_users' doesn't exist

起初觉得可能是因为binlog_format设置问题,修改之后发现问题并没有解决。

尝试使用内置的SQLite安装。

使用SQLite安装,仍报错使用SQLite安装,仍报错

去官方社区逛了一圈发现。。。

官方提示NextCloud,并不能安装在Windows上官方提示NextCloud,并不能安装在Windows上

Error:
  • Nextcloud Server does not support Microsoft Windows. We recommend usinga virtual machine or docker image on Windows Server.
  • Nextcloud服务器并不能支持在 Microsoft Windows 上运行。我们建议在 Windows Server 上使用虚拟机或 docker 映像
info: PS:我真蠢...

PHP获取文件后缀名的7种方法

PHP获取文件后缀名(扩展名)的7种方法。

字符串截取

56916556427627.png56916556427627.png

$file_name = 'a.b.c.png';
echo strrchr($file_name, '.');
info:使用 strrchr() 函数找到字符 . 在字符串中最后出现的位置,并返回从该位置到字符串结尾的所有字符。

569171433075971.png569171433075971.png

$file_name = 'a.b.c.png';
echo substr($file_name, strrpos($file_name, '.'));
info:使用 strrpos() 函数找到字符 . 在字符串中最后一次出现的位置,然后使用 substr() 函数从该位置开始截取字符串。

数组分割

569172894770027.png569172894770027.png

$file_name = 'a.b.c.png';
$arr=explode('.', $file_name);
echo $arr[count($arr)-1];
info:使用 explode() 函数分割字符串到数组,然后返回数组的最后一个元素。

569171460915041.png569171460915041.png

$file_name = 'a.b.c.png';
$arr=explode('.', $file_name);
echo end($arr);
info:基本同上,这里使用 end() 函数返回数组的最后一个元素。

569171085222251.png569171085222251.png

$file_name = 'a.b.c.png';
echo strrev(explode('.', strrev($file_name))[0]);
info:strrev() 函数,反转字符串。这里先反转文件名字符串,然后使用 . 分割字符串并返回数组的第一个元素,最后再次反转。
warning:PS:个人感觉整个有一点简单问题复杂化。好处就是,不用判断数组长度了。

使用路径函数

56917619385548.png56917619385548.png

$file_name = 'a.b.c.png';
echo pathinfo($file_name)['extension'];
info:pathinfo() 函数以数组的形式返回文件路径的信息。
//`pathinfo()` 函数返回的数组包括以下的数组元素:
Array
(
[dirname] // 文件路径 “.”
[basename] // 文件名 “a.b.c.png”
[extension] // 文件扩展名 “png”
)

569171548380459.png569171548380459.png

$file_name = 'a.b.c.png';
echo pathinfo($file_name, PATHINFO_EXTENSION);

info:
基本同上。

可选的参数。规定要返回的数组元素。默认是 all。

  • PATHINFO_DIRNAME - 只返回 dirname
  • PATHINFO_BASENAME - 只返回 basename
  • PATHINFO_EXTENSION - 只返回 extension

部分内容参考 https://www.php.cn/php-weizijiaocheng-392130.html

Typecho 实现短代码功能

Typecho 实现短代码功能。

前几天,准备对博客首页大改。在寻找灵感的途中。发现有的博客实现了一些好玩的功能。

这个短代码就是其中之一。

毕竟markdown里没有太明显的提示或警告。

稍微研究了一下。


演示

短代码标记短代码标记

info:一般提示
warning:警告提示
Error:危险提示
info:多行内容测试:

生活如酒,或芳香,或浓烈,因为诚实,它变得醇厚;生活如歌,或高昂,或低沉,因为守信,它变得悦耳; 生活如画,或明丽,或素雅,因为诚信,它变得美丽。

原理

很简单的一个原理,用正则匹配短代码标签,把他替换成样式就OK了。


方法

在主题的 functions.php 的文件里,新建个函数。

// 短代码测试
    function getContentTest($content) {
        $pattern = '/\[(info)\](.*?)\[\s*\/\1\s*\]/';
        $replacement = '<div class="hint hint-info"><span class="glyphicon glyphicon-info-sign hint-info-icon" aria-hidden="true"></span>$2</div>';    
        $content = preg_replace($pattern, $replacement, $content);

        $pattern = '/\[(warning)\](.*?)\[\s*\/\1\s*\]/';
        $replacement = '<div class="hint hint-warning"><span class="glyphicon glyphicon-question-sign hint-warning-icon" aria-hidden="true"></span>$2</div>';    
        $content = preg_replace($pattern, $replacement, $content);

        $pattern = '/\[(danger)\](.*?)\[\s*\/\1\s*\]/';
        $replacement = '<div class="hint hint-danger"><span class="glyphicon glyphicon-exclamation-sign hint-danger-icon" aria-hidden="true"></span>$2</div>';    
        $content = preg_replace($pattern, $replacement, $content);
        
        return $content;
    }

短代码短代码

然后把主题里输出文章内容的函数(共三处处:index.php 、page.php 和 articles.php)

<?php $this->content(); ?>

换成你刚刚添加的

<?php echo getContentTest($this->content); ?

articles.phparticles.php

Error:注意:如果导致首页文章无法正常使用<!--more-->标记截断,请移步此处

文章摘要去除短代码标记

原理:对excerpt函数输出的内容再次正则匹配,来在摘要中剔除 短代码标记

在输出的摘要中剔除短代码标记在输出的摘要中剔除短代码标记

// 摘要短代码测试
function getExcerptTest($excerpt,$num,$str) {
    $pattern = '/\[(info)\](.*?)\[\s*\/\1\s*\]/';
    $replacement = ' $2 ';  
    $excerpt = preg_replace($pattern, $replacement, $excerpt);

    $pattern = '/\[(warning)\](.*?)\[\s*\/\1\s*\]/';
    $replacement = ' $2 ';  
    $excerpt = preg_replace($pattern, $replacement, $excerpt);

    $pattern = '/\[(danger)\](.*?)\[\s*\/\1\s*\]/';
    $replacement = ' $2 ';  
    $excerpt = preg_replace($pattern, $replacement, $excerpt);

    //使用mb_substr防止中文截取成乱码,需要开启extension=php_mbstring.dll扩展,一般都开了
    return mb_substr($excerpt,0,$num,"UTF-8").$str;
}

functions.phpfunctions.php

使用下面的代码替换原有摘要输出(150是截断字数, ' ......' 是需要显示的提示)

<?php echo getExcerptTest($this->text,150,' ......'); ?>

替换原有摘要输出替换原有摘要输出