博客 (241)

升级“微信登录 1.1.6”插件后,发现微社区发帖提示“抱歉,您的请求来路不正确或表单验证串不符,无法提交”,查看更新日记发现微社区域名更换为 wsq.discuz.com,导致表单验证不通过的原因就是它了。

解决方法是打开:\source\class\helper\helper_form.php

找到:'http://wsq.discuz.qq.com', 24

或:'http://wsq.discuz.qq.com/', 25

替换为:'http://wsq.discuz.com/', 22

然后清空目录:\data\cache\qrcode\

至于帖子分享给朋友或朋友圈的标题和图片不正常的问题,目前还没有办法解决,听说是该插件要收费的节奏,具体可以参与官方讨论:

http://www.discuz.net/forum-2-1.html

另外,如果发现微社区里的用户头像或表情不能正常显示,一般是由于做了防盗链引起的,只要在白名单里加上 *.discuz.com 就行了

xoyozo 9 年前
5,670

以某论坛配置 memcache 只允许本机 IP 访问 11211 端口为例:

一句一句执行:

service iptables status // 查询当前防火墙状态

iptables -A INPUT -s 127.0.0.1/24 -p tcp --dport 11211 -j ACCEPT // 允许本地回环

iptables -A INPUT -s X.X.X.X/24 -p tcp --dport 11211 -j ACCEPT // 允许本机内网IP

iptables -A INPUT -s X.X.X.X/24 -p tcp --dport 11211 -j ACCEPT // 允许本机公网IP

iptables -A INPUT -p tcp --dport 11211 -j DROP // 禁止其它IP

service iptables status // 查询当前防火墙状态

service iptables save // 保存规则
xoyozo 10 年前
7,513

在 ASP.NET Core 或 ASP.NET 5 中部署百度编辑器请跳转此文


本文记录百度编辑器 ASP.NET 版的部署过程,对其它语言版本也有一定的参考价值。

【2020.02.21 重新整理】


下载

从 GitHub 下载最新发布版本:https://github.com/fex-team/ueditor/releases

按编码分有 gbk 和 utf8 两种版本,按服务端编程语言分有 asp、jsp、net、php 四种版本,按需下载。


目录介绍

以 v1.4.3.3 utf8-net 为例,

ueditor 目录结构.png


客户端部署

本例将上述所有目录和文件拷贝到网站目录 /libs/ueditor/ 下。

当然也可以引用 CDN 静态资源,但会遇到诸多跨域问题,不建议。

在内容编辑页面引入:

<script src="/libs/ueditor/ueditor.config.js"></script>
<script src="/libs/ueditor/ueditor.all.min.js"></script>

在内容显示页面引入:

<script src="/libs/ueditor/ueditor.parse.min.js"></script>

如需修改编辑器资源文件根路径,参 ueditor.config.js 文件内顶部文件。(一般不需要单独设置)

如果使用 CDN,那么在初始化 UE 实例的时候应配置 serverUrl 值(即 controller.ashx 所在路径)。


客户端配置

初始化 UE 实例:

var ue = UE.getEditor('tb_content', {
    // serverUrl: '/libs/ueditor/net/controller.ashx', // 指定服务端接收文件路径
    initialFrameWidth: '100%'
});

其它参数见官方文档,或 ueditor.config.js 文件。


服务端部署

net 目录是 ASP.NET 版的服务端程序,用来实现接收上传的文件等功能。

本例中在网站中的位置是 /libs/ueditor/net/。如果改动了位置,那么在初始化 UE 的时候也应该配置 serverUrl 值。

这是一个完整的 VS 项目,可以单独部署为一个网站。其中:

net/config.json  服务端配置文件
net/controller.ashx  文件上传入口
net/App_Code/CrawlerHandler.cs  远程抓图动作
net/App_Code/ListFileManager.cs  文件管理动作
net/App_Code/UploadHandler.cs  上传动作

该目录不需要转换为应用程序。


服务端配置

根据 config.json 中 *PathFormat 的默认配置,一般地,上传的图片会保存在 controller.ashx 文件所在目录(即本例中的 /libs/ueditor/)的 upload 目录中:
/libs/ueditor/upload/image/
原因是 UploadHandler.cs 中 Server.MapPath 的参数是由 *PathFormat 决定的。

修改 config.json 中的 imagePathFormat 为例:

原值:"imagePathFormat": "upload/image/{yyyy}{mm}{dd}/{time}{rand:6}"

改为:"imagePathFormat": "/upload/ueditor/{yyyy}{mm}{dd}/{time}{rand:6}"

以“/”开始的路径在 Server.MapPath 时会定位到网站根目录。

此处不能以“~/”开始,因为最终在客户端显示的图片路径是 imageUrlPrefiximagePathFormat,若其中包含符号“~”就无法正确显示。

在该配置文件中查找所有 PathFormat,按相同的规则修改。


说到客户端的图片路径,我们只要将

原值:"imageUrlPrefix": "/ueditor/net/"

改为:"imageUrlPrefix": ""

即可返回客户端正确的 URL。

当然也要同步修改 scrawlUrlPrefix、snapscreenUrlPrefix、catcherUrlPrefix、videoUrlPrefix、fileUrlPrefix。


特殊情况,在复制包含图片的网页内容的操作中,若图片地址带“?”等符号,会出现无法保存到磁盘的情况,需要修改以下代码:

打开  CrawlerHandler.cs 文件,找到

ServerUrl = PathFormatter.Format(Path.GetFileName(this.SourceUrl), Config.GetString("catcherPathFormat"));

替换成:

ServerUrl = PathFormatter.Format(Path.GetFileName(SourceUrl.Contains("?") ? SourceUrl.Substring(0, SourceUrl.IndexOf("?")) : SourceUrl), Config.GetString("catcherPathFormat"));


如果你将图片保存到第三方图库,那么 imageUrlPrefix 值设为相应的域名即可,如:

改为:"imageUrlPrefix": "//cdn.***.com"

然后在 UploadHandler.cs 文件(用于文件上传)中找到

File.WriteAllBytes(localPath, uploadFileBytes);

在其下方插入上传到第三方图库的代码,以阿里云 OSS 为例:

// 上传到 OSS
client.PutObject(bucketName, savePath.Substring(1), localPath);

在 CrawlerHandler.cs 文件(无程抓图上传)中找到

File.WriteAllBytes(savePath, bytes);

在其下方插入上传到第三方图库的代码,以阿里云 OSS 为例:

// 上传到 OSS
client.PutObject(bucketName, ServerUrl.Substring(1), savePath);


最后有还有两个以 UrlPrefix 结尾的参数名 imageManagerUrlPrefix 和 fileManagerUrlPrefix 分别是用来列出上传目录中的图片和文件的,

对应的操作是在编辑器上的“多图上传”功能的“在线管理”,和“附件”功能的“在线附件”。

最终列出的图片路径是由 imageManagerUrlPrefiximageManagerListPath + 图片 URL 组成的,那么:

"imageManagerListPath": "/upload/ueditor/image",

"imageManagerUrlPrefix": "",

以及:

"fileManagerListPath": "/upload/ueditor/file",

"fileManagerUrlPrefix": "",

即可。

如果是上传到第三方图库的,且图库上的文件与本地副本是一致的,那么将 imageManagerUrlPrefix 和 fileManagerUrlPrefix 设置为图库域名,

服务端仍然以 imageManagerListPath 指定的路径来查找本地文件(非图库),但客户端显示图库的文件 URL。

因此,如果文件仅存放在图库上,本地没有副本的情况就无法使用该功能了。

综上,所有的 *UrlPrefix 应该设为一致。


另外记得配置不希望被远程抓图的域名,参数 catcherLocalDomain


服务端授权

现在来判断一下只有登录用户才允许上传。

首先打开服务端的统一入口文件 controller.ashx

继承类“IHttpHandler”改为“IHttpHandler, System.Web.SessionState.IRequiresSessionState”,即同时继承两个类,以便可使用 Session,
找到“switch”,其上插入:

if (用户未登录) { throw new System.Exception("请登录后再试"); }

即用户已登录或 action 为获取 config 才进入 switch。然后,

else
{
    action = new NotAllowedHandler(context);
}

这里的 NotAllowedHandler 是参照 NotSupportedHandler 创建的,提示语 state 可以是“登录后才能进行此操作。


上传目录权限设置

上传目录(即本例中的 /upload/ueditor/ 目录)应设置允许写入和禁止执行。


基本用法

设置内容:

ue.setContent("Hello world.");

获取内容:

var a = ue.getContent();

更多用法见官方文档:http://fex.baidu.com/ueditor/#api-common


其它事宜

配置上传附件的文件格式

找到文件:config.json,更改“上传文件配置”的 fileAllowFiles 项,

同时在 Web 服务器上允许这些格式的文件可访问权限。以 IIS 为例,在“MIME 类型”模块中添加扩展名。


遇到从客户端(......)中检测到有潜在危险的 Request.Form 值。参考此文


另外,对于不支持上传 .webp 类型的图片的问题,可以作以下修改:
config.json 中搜索“".bmp"”,替换为“".bmp", ".webp"
IIS 中选中对应网站或直接选中服务器名,打开“MIME 类型”,添加,文件扩展名为“.webp”,MIME 类型为“image/webp


最后,为了在内容展示页面看到跟编辑器中相同的效果,请参照官方文档引用 uParse

若有插入代码,再引用:
<link href="/lib/ueditor/utf8-net/third-party/SyntaxHighlighter/shCoreDefault.css" rel="stylesheet" />
<script src="/lib/ueditor/utf8-net/third-party/SyntaxHighlighter/shCore.js"></script>

其它插件雷同。


若对编辑器的尺寸有要求,在初始化时设置即可:

var ue = UE.getEditor('tb_content', {

  initialFrameWidth: '100%',
  initialFrameHeight: 320
});


图片等附件上传到阿里云 OSS 参考此文

xoyozo 10 年前
7,850

在同一内网,如果不同服务器上的项目间通过接口调用数据,那么可以通过更改 hosts 的方法来提高访问速度降低带宽使用

上述情况一般地容易想到直接使用 IP 形式的网址来调用数据,如果这样的话,接口方必须将项目建立在 Web 服务器的默认网站上,在有多个项目共存的服务器上,这种方式就有非常大的局限性。而通过更改 hosts 文件,我们可以直接使用域名形式的网址来调用数据,该域名将会被“解析”到内网 IP 上,而且是映射到绑定了该域名的网站上(绑定时“IP 地址”设为“全部未分配”)。

具体实现方法:

Windows Server:用记事本打开文件 C:\Windows\System32\drivers\etc\hosts

Linux / centos:vi /etc/hosts

添加一行:接口服务器的内网 IP + 空格 + 接口网站的域名

如:64.233.162.84 www.google.com

xoyozo 10 年前
4,946
xoyozo 11 年前
4,614

本教程使用 U 盘 OS X 启动盘和 U 盘 Windows 安装盘,硬盘安装稍有不同。

系统安装前

准备工作

制作系统盘

  • 如果 OS X 系统已经无法进入,则只能用 Internet Recovery 重装了(联网下载 5G 左右的安装包)。否则可以进入 OS X,从 App Store 下载最新的 OS X 安装包制作 USB 启动盘。

  • 制作 USB OS X 启动盘教程:适用于 Mavericks(10.9) 及更旧版本适用于 Yosemite(10.10) 及更新版本

  • 使用 OS X 的 Boot Camp 助手制作 U 盘 Windows 安装盘(若使用一般的 Windows 安装盘,安装完成后会遇到无法安装 Boot Camp 的问题,即使是正确的版本)

 

安装 OS X

版本

  • 本文适用且不限于 OS X 10.8.4 - 10.9.3

分区与安装

  • 插入 USB OS X 启动盘,开机,出现白屏即按住 option / Alt 键,选择相应的启动盘(联网恢复方式:开机按“option”+“command”+“R”,在磁盘工具分区时如果遇到“未能卸载磁盘”,就可以用联网恢复的方式重新分区)

  • 进入磁盘工具,分区:3 个分区:(安装 OS X 的分区必须放在最后)

  • 选中第 3 个分区:Macintosh HD,Mac OS 扩展(日志式),100G,选项:GUID 分区表,用于安装 OS X

  • 选中第 2 个分区:BOOTCAMP,MS-DOS(FAT),100G,用于安装 Windows

  • 选中第 1 个分区:DATA,ExFAT,用于存放数据(公共盘)

  • 应用,退出磁盘工具,选择重新安装 OS X,选择安装在 Macintosh HD 分区

  • 等待约 30 分钟安装完成

  • Finder 中推出并拔除 USB OS X 启动盘

 

安装 Windows

安装

  • 插入 USB Windows 安装盘

  • 在 OS X 中进入:系统偏好设置 - 启动磁盘 - 选择 USB Windows 启动盘 或者 重新启动系统 - 响完“当”且白屏前按住 Option 或 Alt 键,选择 USB 图标的 Windows 项(不是 EFI Boot 那项)

  • 全新安装,选中 BOOTCAMP 分区并格式化,安装。(注:[待测]下次尝试删除全部分区并重新分区,如果能安装并启动成功,就是没有 OS X 的 Windows 单系统了。由于制作 U 盘 OS X 启动盘和 Windows 安装盘都需要在 OS X 环境下进行,所以必须权衡是否真的只需要单系统,否则下次只能用 Internet Recovery 方式重装了)

  • 安装完成后,安装 Boot Camp 支持软件(已集成到 Windows 安装盘内)

  • 必须通过右下角的 Boot Camp 来重启进入 OS X,否则在移除 USB Windows 安装盘的情况下无法进入各系统。(此条为真?待测)

  • 正常弹出并拔除 USB Windows 安装盘

 

其它

Apple Wireless Keyboard

  • 确保设备管理器的蓝牙设备中有 Apple 字样的驱动名称(即蓝牙驱动是通过 Boot Camp 安装的)

  • 打开键盘电源

  • 右击 Windows 任务栏小图标中的蓝牙图标,添加新设备

  • 配对

xoyozo 11 年前
10,516

这里仅记录我个人的安装过程,仅供参考。

安装前的准备

  • 手动备份:数据库、浏览器收藏夹、FTP 站点、Navicat 连接、远程桌面、RaiDrive(点登录)、RSS源、虚拟机镜像、“下载”目录、“桌面”目录、开机启动程序、任务计划程序iPhone 备份(C:\Users\[用户名]\Apple\MobileSync\Backup)、浏览器插件、自动备份中的差异化文件。

  • 推荐的 Edge 扩展(登录账号会自动同步):Charset、Feedbro、IP Address and Domain Information、JSON Beautifier and Editor、Kimi 浏览器助手、JSONView、Pretty Js、User-Agent Switcher and Manager、Wappalyzer、图片助手(ImageAssistant) 批量图片下载器、猫抓、网页更新提醒、xoyozo 的冲浪助手

  • 桌面图标和开始菜单截图。桌面如果是手动排序图标的,先按分类归入文件夹,以方便系统恢复后按分类摆放。

  • 备份:桌面、Chrome 用户目录、聊天记录、快捷回复、项目、hosts 文件。

    像 QQ、TIM、微信、旺旺、千牛 等即时聊天工具,最好将数据文件目录拷贝一份(包含图片视频等),再打开软件登录帐号进行记录备份(一般不含图片视频等)。这样,在重装系统后,如果还原拷贝的聊天文件不能供聊天软件使用,可以用备份数据恢复。

  • 备份剪映目录,否则重装后需要重新下载素材/字体等,位置:C:\用户\AppData\Local\JianyingPro\User Data\

  • 备份到移动硬盘或 NAS

  • 排查以上未提及的新软件或新设置是否有需要处理或备份的。

  • 清空回收站

  • 确定系统盘所在硬盘和分区和大小,避免在格式化时选错硬盘分区。

  • 外星人电脑开机按 F2 进入 BIOS,F12 选择启动设备。

设置

  • 这台电脑(右键)- 属性 - 高级系统设置 - 高级 - 性能设置 - 高级 - 更改 - 去掉“自动管理所有驱动器的分布文件大小”前的勾,选择 SSD 分区的分布文件为系统管理的大小,点设置,其它分区无分布文件,点设置 - 确定

  • 以上是在 SSD 空间足够的情况下,如果不足,那么可以分配到其它分区。

  • Windows 更新、并在高级选项中开启(更新 Windows 时接收其它 Microsoft 产品的更新)

安装驱动

  • 目前的 Windows Update 已经可以安装大部分驱动了,如果设备管理器中还有警示图标,或者有些硬件功能不能启用,那么可以前往对应品牌的官网下载,如联想驱动安装工具戴尔驱动程序,其它可使用驱动精灵

安装 Office

  • 安装 Office 批量授权版

  • 立即安装即可,不要更改路径。

恢复数据

  • Chrome 目录(C:\Users\[用户名]\AppData\Local\Google\Chrome\User Data\Default\)

  • QQ 记录(默认路径:C:\Users\[用户名]\Documents\Tencent Files)

  • 微信记录(默认路径:C:\Users\[用户名]\Documents\WeChat Files),微信记录可能会不能使用

  • 视情况删除非系统盘的 \Program Files、\Program Files (x86)、\Users\xoyozo\AppData 等

应用程序

  • 安装 Edge。

  • 先安装 SQL Server,再安装 Visual Studio(如欲同时安装低版本 VS,先安装低版本,再安装高版本)

  • 安装 Adobe

  • 安装其它软件

  • 替换 hosts,若出现安全软件警告,信任即可。

激活 Windows、Office、Adobe 等:

细节

  • Win10 任务栏单击“文件资源管理器”打开“此电脑”的设置方法:打开任意文件资源管理器窗口,菜单 - 查看 - 选项,将“打开文件资源管理器时打开”改为“此电脑”

  • Win10 任务栏日期显示星期:控制面板 - 更改日期、时间和数字格式 - 其他设置 - 日期,将短日期改为:yyyy/M/d ddd

  • 如何在 Windows 11 任务栏时间上显示“秒”

  • 随系统启动程序的目录(所有用户):C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp

  • 随系统启动程序的目录(单个用户):C:\用户\[用户名]\AppData\Roaming\Microsoft\Windows\「开始」菜单\程序\启动,(即:C:\Users\[用户名]\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

  • 自带的微软五笔已经提供五笔拼音混打了,所以抛弃QQ五笔了

  • Win10系统怎样让打开图片方式为照片查看器

  • 设置 Navicat 自动运行。

  • 设置电源相关

  • SQL Server 按需设置启动/禁用:SQL Server 配置管理器 - SQL Server 服务 - 右侧双击选择实例 - 切换到“服务”选项卡 - 启动模式


xoyozo 11 年前
17,464

打开 Fiddler Web Debugger 菜单栏上的 Tools - Fiddler Options...

切换到 HTTPS 选项卡

勾选 Capture HTTPS CONNECTsDecrypt HTTPS trafficOK

 

另,这种情况如何破?

*** FIDDLER: RawDisplay truncated at 128 characters. Right-click to disable truncation. ***

xoyozo 10 年前
9,248

jQuery 请求代码:

$.ajax({
  url: "xxxxxx",
  //method: "GET", // 默认 GET(当 dataType 为 jsonp 时此参数无效,始终以 GET 方式请求)
  data: $('#myForm').serialize(), // 要传递的参数,这里提交表单 myForm 的内容
  dataType: "jsonp"
  //, jsonp: "callback" // 请求中的回调函数的参数名,默认值 callback
  //, jsonpCallback: "jQuery_abc" // 本地回调函数名,不指定则随机
})
  .done(function () {
    alert("done");
    if (true) {
      $('#myForm')[0].reset();
    }
  })
  .fail(function () { alert("fail"); })
  .always(function () { alert("complete"); });

ASP.NET 处理代码:

JavaScriptSerializer jss = new JavaScriptSerializer();

string json = jss.Serialize(new { result = new { success = true, msg = "成功" } });

if (!string.IsNullOrWhiteSpace(Request["callback"])
  && Regex.IsMatch(Request["callback"], @"[_$a-zA-Z][$\w]*"))
{
  Response.ContentType = "application/javascript; charset=utf-8";
  Response.Write(json + Request["callback"] + "(" + json + ")");
}
else
{
  Response.ContentType = "application/json; charset=utf-8";
  Response.Write(json);
}

Response.End();
xoyozo 10 年前
5,518

最近有服务器不时出现的CPU使用率超高,内存几乎被吃光,系统甚至自动kill掉一些进程,如sshd,vsftpd等。用top查看,PHP-CGI进程高挂不下,如下是解决方案:
一、进程跟踪
# top //找出CPU使用率高的进程PID
# strace -p PID //跟踪进程
# ll /proc/PID/fd //查看该进程在处理哪些文件
将有可疑的PHP代码修改之,如:file_get_contents没有设置超时时间。
二、内存分配
如果进程跟踪无法找到问题所在,再从系统方面找原因,会不会有可能内存不够用?据说一个较为干净的PHP-CGI打开大概20M-30M左右的内存,决定于PHP模块开启多少。
通过pmap指令查看PHP-CGI进程的内存使用情况
# pmap $(pgrep php-cgi |head -1)
按输出的结果,结合系统的内存大小,配置PHP-CGI的进程数(max_children)。
三、监控
最后,还可以通过监控与自动恢复的脚本保证服务的正常运转。下面是我用到的一些脚本:
只要一个php-cgi进程占用的内存超过 %1 就把它kill掉
#!/bin/sh
PIDS=`ps aux|grep php-cgi|grep -v grep|awk’{if($4>=1)print $2}’`
for PID in $PIDS
do
echo `date +%F….%T`>>/data/logs/phpkill.log
echo $PID >> /data/logs/phpkill.log
kill -9 $PID
done


检测php-fpm进程
#!/bin/bash
netstat -tnlp | grep “php-cgi” >> /dev/null #2&> /data/logs/php_fasle.log
if [ "$?" -eq "1" ];then #&& [ `netstat -tnlp | grep 9000 | awk '{ print $4}' | awk -F ":" '{print $2}'` -eq "1" ];then
/usr/local/webserver/php/sbin/php-fpm start
echo `date +%F….%T` “System memory OOM.Kill php-cgi. php-fpm service start. ” >> /data/logs/php_monitor.log
fi

通过http检测php执行
#!/bin/bash
status=`curl -s –head “http://127.0.0.1:8080/chk.php” | awk ‘/HTTP/ {print $2}’`
if [ $status != "200" -a $status != "304" ]; then
/usr/local/webserver/php/sbin/php-fpm restart
echo `date +%F….%T` “php-fpm service restart” >> /data/logs/php_monitor.log
fi

l
转自 lgh_2002 13 年前
4,757