该若木草

GaiRuoMuCaoXianKu


  • 首页

  • 标签37

  • 分类2

  • 归档19

修复插入U盘后提示使用前需要格式化问题

发表于 2023-10-21 | 分类于 杂谈

U盘插入后提示使用前需要将其格式化,无法查看内部文件。

打开命令提示符,输入

1
chkdsk U盘盘符:/r

然后等待修复完成就好了,这个比视频网站上那些骗人下载的软件好用得多。

以前的话U盘出问题直接格式化就完事了,不需要考虑这么多。现在这U盘容量越做越大,备份恢复都是麻烦事,还是得靠这种快速修复的方法。

CodeIgniter对接Vue无法获取post值问题

发表于 2021-03-20 | 更新于 2023-10-21 | 分类于 杂谈

要使用 Vue 前端+ CodeIgniter 后端这种方式,第一个是跨域问题,从网上抄了一段写的挺详细的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// 1、对普通的GET/POST/PUT请求,请求头设置如下:
// 设置json格式请求头
header("Content-type:application/json; charset=utf-8");
//跨域请求允许的域名设置,因为需要传递cookie,不能使用*
header("Access-Control-Allow-Origin: *");
// 跨域请求允许的请求头
header("Access-Control-Allow-Headers: Content-type");
// 跨域请求同意发送Cookie
header("Access-Control-Allow-Credentials: true");

// 2、非简单请求每次请求前,都会发送一个一次”预检“请求,它是 options的请求方式。它主要是询问服务器是否允许这个非简单请求访问,如果我们允许,则返回所需要的回应头信息(response header),这个预检请求的请求头设置如下:
//设置json格式请求头
header("Content-type:application/json; charset=utf-8");
// 跨域请求允许的域名设置
header("Access-Control-Allow-Origin: *");
// 跨域请求允许的请求头
header("Access-Control-Allow-Headers: Content-type");
header("Vary: Accept-Encoding, Origin");
// 跨域请求同意发送Cookie
header("Access-Control-Allow-Credentials: true");
// options请求中所允许的方法
header("Access-Control-Allow-Methods: GET, POST, PUT, OPTIONS");
// OPTIONS这个预请求的有效时间,20天
header("Access-Control-Max-Age: 1728000");

但对于这里来说不用那么复杂,只需要设置 Access-Control-Allow-Origin 就行了,CI 的写法:

1
$this->output->set_header("Access-Control-Allow-Origin: *");//"*"改为网站地址

Vue 中:

1
2
3
4
5
6
7
let data= {
name: this.name,
email: this.email
};
axios.post("http://localhost/test/", data).then(res => {
console.log(res);
});

CodeIgniter 中:

1
2
3
4
5
6
7
8
9
public function test(){
$name = $this->input->post('name');
$email = $this->input->post('email');
$arr = array(
'name' => $name,
'email' => $email
);
echo json_encode($arr);
}

试了试发现 Vue 正常,也能收到返回值,但 CI 却没办法收到 post 的数据,直接返回 null ,

后来发现 axios 里面写着:

会默认序列化 JavaScript 对象为 JSON。 如果想使用 application/x-www-form-urlencoded 格式,你可以使用下面的配置。
1
2
3
4
5
const params = new URLSearchParams();
params.append('param1', 'value1');
params.append('param2', 'value2');
axios.post('/foo', params);
......

把 Vue 部分改一下就行了:

1
2
3
4
5
6
let params = new URLSearchParams();
params.append("name", this.name);
params.append("email", this.email);
axios.post("http://localhost/test/", params).then(res => {
console.log(res);
});

Euserv安装宝塔

发表于 2021-03-09 | 更新于 2023-10-21 | 分类于 杂谈

打算把之前吃灰的 Euserv 利用起来,一登录发现被暂停了需要手动激活,不过好在倒是没给我直接删了。可重新激活开机后连不上 SSH ,一直提示Connection closed by foreign host.解决不了直接重装了事。

安装之前首先要修改DNS

1
echo -e "nameserver 2001:67c:2b0::4\nnameserver 2001:67c:2b0::6" > /etc/resolv.conf

接下来编辑一下

1
2
3
vi /etc/yum/pluginconf.d/fastestmirror.conf

enable=0 #将1改为0

安装宝塔(Centos7)

1
yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh

按理来说到这应该就完事了,不过这碰到个问题是BT-Panel报错无法启动,提示ModuleNotFoundError: No module named 'gevent' ,那就按提示安装下吧

1
pip install gevent

接着就显示pip: command not found pip也没安装… 好吧继续。

1
2
3
4
5
6
7
8
9
wget https://bootstrap.pypa.io/get-pip.py #Centos默认的python 2.7版本会提示更换链接,使用替换的新链接下载。

python get-pip.py

pip -V #到这一步之后的没必要

find / -name pip

ln -s /usr/local/python/bin/pip /usr/bin/pip

都装完了之后重启宝塔,还报错,依然是ModuleNotFoundError: No module named 'gevent',翻了翻论坛,发现也有人之前碰到这个问题,解决方法是

1
2
rm -rf /www/server/panel/pyenv
curl http://download.bt.cn/install/update_panel.sh|bash

重新启动,总算跑起来了,使用 ipv6 打开页面正常,可一登陆又碰到个奇葩事,默认的账号密码登陆后,会被弹回到 login 页面,开始猜测可能是 ipv6 的问题,打算绑个域名试试,结果还是不行。后来发现问题在浏览器上,Firefox 下就会出问题,而 Edge 就没事。

装了宝塔推荐的LNMP环境,新建站点报错 ERROR: 检测到配置文件有错误,请先排除后再操作 一时间也不好判断是哪的问题,干脆重装下,这次改用编译安装试试。结果装完之后倒是能新建站点了,可 Nginx 又趴窝了,后台无论是启动还是重启都不行,连 SSH 试试

1
service nginx start

报错 cat: /proc/cmdline: Permission denied 换个方式

1
systemctl status nginx.service

还报错…不过一看宝塔面板显示 Nginx 倒是运行起来了,也懒得深究是怎么回事了先用着吧。

绑个域名,在别人的教程那看都是用CF,不过现在域名商都支持直接 AAA 解析到 ipv6,直接绑应该也没问题,至少自用是可以的。

Vue实现百度搜索词联想

发表于 2021-02-06 | 更新于 2023-10-21 | 分类于 杂谈

最近看别人都在搞,也打算跟风弄个导航页试试,在我看来导航页这玩意没什么太大的区别,前端方面的标准样式就是一个导航链接加一个搜索框加上几个链接块,再美化一下加点特效就差不多成了。

原本打算把搜索做成自动联想链接块的关键词这样的方式,可想了想可能有点鸡肋,在页面链接不多的情况下,这功能会难以触发,而大多数人的常用网站也就十个左右,算上不常用的二三十差不多就到头了。最后决定还是把这当成一个站外搜索的辅助功能,这就需要用到百度接口来做搜索热词联想。

百度搜索接口:

1
'https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su'

具体使用方法:

Vue-jsonp

1
https://github.com/LancerComet/vue-jsonp

编辑main.js

1
2
3
4
import { VueJsonp } from 'vue-jsonp'

// Vue Plugin.
Vue.use(VueJsonp)

使用jsonp获得联想词

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
this.$jsonp('https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su',{
//val为输入的搜索词
wd:val,
//回调在这种写法下加不加无所谓
callbackQuery:'cb',
callbackName:'getResult'

})
.then(res=>{
//showResult处理收到的res,主要是提取res.s中的联想词
this.showResult(res);
})
.catch(err => {
return err;
});

最终结果如图

一个漂亮的PHP目录程序

发表于 2020-12-17 | 更新于 2023-10-21 | 分类于 程序

在论坛上看到一个挺漂亮的PHP文件目录程序,很适合拿来当相册自用。

官方Demo:https://files.photo.gallery/demo

从Demo里看程序支持图片,音频,视频,以及多种后缀文本文件的在线预览和下载,其他的什么排序,查看,搜索(似乎只支持当前目录下搜索),文件夹展开和跳转这些小功能也比较齐备,更重要的是这个程序还非常好看,对大多数人来说这一点才是选择相册程序的首要原因。

下载地址:https://cdn.jsdelivr.net/npm/files.photo.gallery/index.php

下载下来就是一个单独的 PHP 文件,上传后点击进去就能开始使用,程序需要安装GD,mbstring,fileinfo,exif这些扩展,否则会影响一部分功能。刷新两下会生成一个_files/config/config.php配置文件,具体配置方法可以去官网看:

设置说明:https://forum.photo.gallery/viewtopic.php?f=66&t=9964

按照说明进行设置,记得取消掉设置项的注释。其中最重要的是用户名和密码,这两项可以让程序变成一个要求登录的私人目录。至于缓存cache这一项,如果文件少的话其实没什么必要,可以通过cache_key来刷新缓存。

程序在使用中会弹出授权窗口,39刀,喜欢的可以支持一波,不打算花钱又觉得弹窗烦的就去loc里找办法吧。

Hexo博客,NEXT主题与Markdown语法的使用

发表于 2020-12-02 | 更新于 2023-10-21 | 分类于 杂谈

关于Hexo

写文章

1
$ hexo new "My New Post"

直接编辑在_posts文件夹生成的.md文件。文件默认的格式,结合Next主题大概是这样的

1
2
3
4
5
6
title: My New Post
categories: Testing
tags:
- Testing
- Another Tag
---

官网关于写作的说明进入

编辑完成后

1
$ hexo server

启动服务进行本地测试,官网关于服务器的说明进入

发布

本地测试下没问题就可以生成发布了。官网关于生成文件的说明进入

Markdown语法

标题

1
2
3
4
# 一级标题
## 二级标题
### 三级标题
#### 四级标题

字体

1
2
3
4
**加粗的文字**
*倾斜的文字*`
***斜体加粗的文字***
~~删除线的文字~~

引用

1
2
>引用的内容
>>引用引用的内容

分割线

1
2
---
***

图片

1
![图片说明](图片地址 "图片标题")

超链接

1
[链接文字](链接地址 "链接标题")

列表

1
2
3
4
5
6
7
8
9
10
11
无序列表用+ — *

- 列表内容
+ 列表内容
* 列表内容

有序列表用数字加点

1. 列表内容
2. 列表内容
3. 列表内容

表格

1
2
3
4
5
6
7
8
9
表头|表头|表头
---|:---:|---:
内容|内容|内容
内容|内容|内容

文字默认居左
两边加:表示文字居中
右边加:表示文字居右
上面的例子为左中右

搞Typecho碰到的几个问题

发表于 2020-12-02 | 更新于 2023-10-21 | 分类于 杂谈

这几天打算建一个typecho博客玩玩,顺便把几年前写的主题用上,虽然写的不咋地但好歹也是花了自己不少功夫,扔在硬盘吃灰也是可惜。

先去看了下typecho官网,依然是1.1版本没变,在本地打开以前建立的项目 结果直接显示500错误,搜了下原因是php7已经放弃了使用mysql方法连接数据库,需要修改配置文件config.inc.php把

1
$db = new Typecho_Db('Mysql', 'typecho_');

修改为:

1
$db = new Typecho_Db('Pdo_Mysql', 'typecho_');

成功打开博客后,发现页面内的图片都加载不出来了,翻翻源码发现判断文章是否含有图片的语句中的isset()一直都返回false,网上的解释是,php7判断的时候会依次判断,php5则是预加载后判断,也就是说isset($this->fields->thumbnail)这种写法,php5会先执行$this->fields->thumbnail后判断,而php7则是把$this->fields->thumbnail当成一个变量进行判断。typecho没做相关的处理,所以暂时只能改一下写法,比如:

1
2
$thumb=$this->fields->thumbnail
if(isset($thumb)){...}

登录后台的时候,又发现上面飘着一行 “Notice: Trying to access array offset on value of type null” ,一搜又是php7.4和typecho的兼容问题,github上的方法是把admin\common.php32行的:

1
$params = parse_url($currentMenu[2]);

改为

1
$params = parse_url(isset($currentMenu[2]) ? $currentMenu[2] : null);

最后,如果启用https的话需要修改配置文件config.inc.php,添加一条:

1
define('__TYPECHO_SECURE__',true);

否则会出现后台无法修改内容 或者干脆登录不了等问题。

Hexo博客引用图片

发表于 2020-12-02 | 更新于 2023-10-21 | 分类于 杂谈

Hexo博客本身没有自带的编辑器,希望在文章中使用自己上传的图片可能要费点功夫,第一步先把配置文件 _config.yml 中的 post_asset_folder 项修改为 true。

新建一篇文章:

1
$ hexo new "My New Post"

之后会发现_posts文件夹下除了文章外多了一个同名文件夹,把需要用到的图片放进去。

在文章里引用图片:

1
{% asset_img 博客图片名 图片说明 %}

跟markdown语法中的引用方法不同:

1
![图片说明](图片地址 "图片标题")

来一张试试:

第二种方法,跟之前一样先编辑配置文件,安装插件 hexo-asset-image 然后就可以按 markdown 的语法用文件名引用文件夹内图片了。

Hexo玩家大多使用国外的空间,本身速度就慢加上时不时网络抽风,图片多的话还是直接放在国内图床比较好。

增加WordPress的用户角色和等级系统

发表于 2020-07-02 | 更新于 2023-10-21 | 分类于 杂谈

WordPress本身是没有等级系统的,只是简单的通过权限来划分不同的用户角色,默认的分组如果觉得还不够细致,可以通过代码来添加一些自定义权限的用户组。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
//从官网抄了个
function xx__update_custom_roles() {
//添加一项'custom_roles_version'保证代码只执行一次
if ( get_option( 'custom_roles_version' ) < 1 ) {
//添加‘注册会员’,权限方面完全拷贝“订阅者”。
add_role( 'custom_role', '注册会员', get_role( 'subscriber' )->capabilities );
//自定义权限
//add_role( 'custom_role', '注册会员', array( 'read' => true, 'level_0' => true ) );
//......
//
update_option( 'custom_roles_version', 1 );
}
}
add_action( 'init', 'xx__update_custom_roles' );

很多人还是更喜欢积分系统,根据用户的行为计算积分,然后再根据积分水平来划分等级。

获得积分的方式可以是签到,评论,点赞或者是其他什么操作。举个例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
//评论获得积分+15
add_action('comment_post', 'add_point');
function add_point( ){
if ( is_user_logged_in() ) {
//如果是登录用户评论,则获取用户
$current_user = wp_get_current_user();
//查询当前积分点数
$current_point = get_user_meta($current_user->ID, 'point', true);
//+15点积分
$point = intval($current_point)+15;
update_user_meta($current_user->ID, 'point', $point);
}
......
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
//后台显示积分
add_action('show_user_profile','user_point_fields',10,1);
function user_point_fields($profileuser){
$point = get_user_meta($profileuser->ID, 'point', true);
//随便写两句
switch ($point){
case (intval($point)<10):
$level = '小会员';
break;
default:
$level = '大会员';
}
?>

<h3>积分</h3>
<table class="form-table">

<tr>
<th>
<label for="point">我的积分</label></th>
<td>
<p><?php echo $point; ?></p>
</td>
</tr>
<tr>
<th>
<label for="level">我的等级</label></th>
<td>
<p><?php echo $level; ?></p>
</td>
</tr>

</table>
<?php
}

限制仅部分高等级可见:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//用短代码实现[level_2]大会员可见内容[/level_2]
add_shortcode( 'level_2', 'level_2_only' );
function level_2_only( $atts, $content = "" ) {
if ( is_user_logged_in() ){
$current_user = wp_get_current_user();
$current_point = get_user_meta($current_user->ID, 'point', true);
if(intval($current_point)>10){
return $content;
}
else{
return '大会员限定';
}
}
else{
return '大会员限定';
}

}

使用epubjs来读取本地epub文件

发表于 2020-03-02 | 更新于 2023-10-21 | 分类于 杂谈

epub.js可以用来解析epub格式的电子书并渲染到网页上,GITHUB地址:https://github.com/futurepress/epub.js

1
2
3
4
5
6
<div id="area">
<script>
var book = ePub("url/to/book/package.opf");
var rendition = book.renderTo("area", {width: 600, height: 400});
var displayed = rendition.display();
</script>

按照上面这个例子,如果是本地文件的话可能读取不到对应的opf或者epub文件,只能通过input + FileReader让文件以ArrayBuffer的形式传入。

1
2
3
4
5
6
7
8
9
10
var fileread = new FileReader();
//读取文件并且将一个包含文件内容的ArrayBuffer保存咋result属性中
fileread.readAsArrayBuffer(e.target.files[0]);
fileread.onload = function(e){
var bookdata = e.target.result;
book = ePub();
book.open(bookdata);
rendition = book.renderTo("area");
rendition.display();
};

这时页面应该有了一个上传入口,传入epub格式文件后书籍的内容会在area区域渲染出来,还自带单双页自适应效果。官网的文档不怎么好读,但是例子给的挺多,都看看试试也就差不多了,一些基本的功能如翻页,章节导航。

章节导航(官网抄的):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
book.loaded.navigation.then(function(toc){
select = document.getElementById("toc"),
docfrag = document.createDocumentFragment();

toc.forEach(function(chapter) {
var option = document.createElement("option");
option.textContent = chapter.label;
option.ref = chapter.href;

docfrag.appendChild(option);
});

select.appendChild(docfrag);

select.onchange = function(){
var index = select.selectedIndex,
url = select.options[index].ref;
rendition.display(url);
return false;
};

});

翻页(同上,抄的):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
rendition.on("keyup", keyListener);

next.addEventListener("click", function(e){
rendition.next();
e.preventDefault();
}, false);

prev.addEventListener("click", function(e){
rendition.prev();
e.preventDefault();
}, false);

var keyListener = function(e){

if ((e.keyCode || e.which) == 37) {
rendition.prev();
}

if ((e.keyCode || e.which) == 39) {
rendition.next();
}

};

document.addEventListener("keyup", keyListener, false);
12
该若木草

该若木草

也不知道是干什么用的博客

19 日志
2 分类
37 标签
RSS
© 2023 该若木草
由 Hexo 强力驱动
|
主题 — NexT.Gemini