分割中文字符串为数组的自定义PHP函数

正在使用的xenforo的similar threads插件,需要将主题的中文标题分割成中文字符数组然后搜索,得到结果
如果直接使用php的mb_split()函数,刚将中文字符串打断成一个一个的字,这样得到了相似主题的关键词自然就非常不准确了。但是如果使用专门的词典来截取字符又过于复杂,在网上试了很好,找到一个比较可靠的PHP函数,将中文字符串截取为指定长度的汉字词组,函数如下:

		function str_split_unicode($str, $l = 0) {
			if ($l > 0) {
				$ret = array();
				$len = mb_strlen($str, "UTF-8");
				for ($i = 0; $i < $len; $i += $l) {
					$ret[] = mb_substr($str, $i, $l, "UTF-8");
				}
				return $ret;
			}
			return preg_split("//u", $str, -1, PREG_SPLIT_NO_EMPTY);
		}

在使用时,指定截取字符的长度,例如4个汉字为一组,

$threadTitleArray = str_split_unicode($threadTitle,4);
shuxin

Xenforo Enhanced Search 修改支持Elasticsearch的IK分词

XFES使用ES搜索,为中文用户提供了非常可靠高效的搜索功能。原版XENFORO直接安装XFES后,使用ES搜索,即可以匹配中文搜索。不过由于elasticsearch需要安装IK分词插件,如果elasticsearch从0.98升到ES2或者ES5/ES6,就没有办法默认使用IK分词,所以需要简单修改一下XFES的代码,使用XFES在创建索引时使用IK分词,而不是使用default.
找到文件:

src\addons\XFES\Service\Analyzer.php

查找

'tokenizer' => 'standard',

更改为

'tokenizer' => 'ik_max_word',

XENFORO后台,进入增强索引设置页面 admin.php?enhanced-search,
索引配置–> 停用词 –> 使用自定义列表
输入中文停用词,然后重建所有搜索索引即可

这个选项中用的是ik_max_word分词,也可以使用ik_smart分词

如果是XFES1系列,则修改的源文件是
library\XenES\ControllerAdmin\Elasticsearch.php
查找:

case 'snowball': $analyzer = array('type' => 'snowball', 'language' => $input['stemming_language']); break;
case 'standard': $analyzer = array('type' => 'standard'); break;

替换为

>case 'snowball': $analyzer = array('type' => 'ik_max_word', 'language' => $input['stemming_language']); break;
case 'standard': $analyzer = array('type' => 'ik_max_word'); break;
Tags:
shuxin

apt-get upgrade 升级程序包时如何选择性忽略某些程序?

一些国外程序,升级特别快,构建其上面的一些应用可能适应不了新版本,致使使用apt-get upgrade升级经常遇到麻烦。如何能够标记某个程序,防止其在apt-get upgrade操作时停止更新呢:

1、查看已安装的程序包列表,两种办法

方法1,使用dpkg包管理程序

sudo dpkg --get-selections | more

或者

sudo apt-mark showmanual | more

2、使用hold参数锁定指定的程序,例如我要锁定elasticsearch,防止apt-get upgrade升级更新

sudo apt-mark hold elasticsearch

再次查看程序包列表就会发现elasticsearch后面已经有了hold字符

e2fsprogs install
ed install
eject install
elasticsearch hold

3、想要取消锁定状态

sudo apt-mark unhold elasticsearch
shuxin

XenForo自定义jquery第三方源

Xenforo的后台可以选择几个CDN的jqery源,如google,jquery官司方等,但如果自定义使用国内的,一般要修改一下源码或者模板
通过自定义模板,也可以非常方便的自定义cdn源,且不受XF源文件升级的影响,方便且实用
后台找到模板:

page_container_js_head

最上方添加:

<xen:if is="{$xenOptions.jQuerySource} == 'jquery'">
      <xen:set var="$jQuerySource">//cdn.bootcss.com/jquery/1.11.0/jquery.min.js</xen:set>
</xen:if>

对应的就进入后台控制面板–设置–选项–性能优化,选择使用jquery官方源时,实际调用的是BOOTCSS的源

shuxin

使用RSYNC同步国内/国外的VPS站点内容及数据库

Linux的RSYNC非常好用,简单方便,配合linux的cron来定时同步两台VPS内容。
目前VPS的价格非常便宜,一年30美元左右非常常见。我购买的vultr的新泽西VPS外加50G免费存储空间,使用rysnc,配合linux的crob和数据库的mysqldump,来同步国外的阿里云VPS与国外的VPS,备份数据。
国外的VPS满足了科学上网、建站、备份三个功能。

注意:这个办法不是实时备份,我是以一天为单位,因为mysqldump会占用资源,如果时间间隔太短,会影响VPS的性能。对于实时备份需求,那站点肯定是比较大,也不在乎这点成本了。

1、Mysql数据库备份
对于使用innodb引擎,mysqldump命令如下:

mysqldump -u数据库用户名 -p数据库密码 --default-character-set=utf8 --opt --extended-insert=false --triggers -R --hex-blob --single-transaction 数据库名 | gzip > 备份目录/数据库名_$(date +%Y%m%d_%H%M%S).sql.gz

对于使用MYISAM引擎,mysqldump命令如下:

mysqldump -u数据库用户名 -p数据库密码 --default-character-set=utf8 --opt --extended-insert=false --triggers -R --hex-blob 数据库名 | gzip > 备份目录/数据库名_$(date +%Y%m%d_%H%M%S).sql.gz

2、RSYNC命令测试
此RSYNC命令运行在目录主机中

rsync -avzhe 'ssh -p SSH端口' 用户名@IP地址:源数据文件目录 目录主机目录

需要注意:
此操作的前提是同步用户名开启了SSH密钥登录,密钥没有密码保护,否则只能用用户名和密码,但是用户名和密码没有办法使用LINUX的计划任务,没有意义

关于SSH密钥登录的设置,可以查看

阿里云服务器ubuntu安全设置

3、设置linux的计划任务
linux当前用户的计划任务编辑命令是crontab -e
需要源VPS中设置mysqldump数据导出的计划任务

30 3 * * * mysqldump -u数据库用户名 -p数据库密码 --default-character-set=utf8 --opt --extended-insert=false --triggers -R --hex-blob 数据库名 | gzip > 备份目录/数据库名_$(date +%Y%m%d_%H%M%S).sql.gz

以上命令中是每一天的3点30分,时区是VPS设置的时区的,可以设置不同的时间点

同样的格式,需要在目标主机VPS中运行crontab -e来设置RSYNC的计划任务
每天4点半同步网站源文件

30 4 * * * rsync -avzhe 'ssh -p SSH端口' 用户名@IP地址:源数据文件目录 目录主机目录

每天5点同步网站数据库备份文件,同步完成后删除源文件

0 5 * * * rsync --remove-source-files -avzhe 'ssh -p SSH端口' 用户名@IP地址:源数据文件目录 目录主机目录
Tags: ,
shuxin

WPS for Linux(ubuntu)字体配置(字体缺失解决办法)

启动WPS for Linux后,出现提示”系统缺失字体” 。

出现提示的原因是因为WPS for Linux没有自带windows的字体,只要在Linux系统中加载字体即可。

具体操作步骤如下:

1. 下载缺失的字体文件,然后复制到Linux系统中的/usr/share/fonts文件夹中。

本站下载:symbol fonts for wps (61)

国外下载地址:https://www.dropbox.com/s/lfy4hvq95ilwyw5/wps_symbol_fonts.zip

(上述数据来源网络,侵删)

下载完成后,解压并进入目录中,继续执行:

sudo cp * /usr/share/fonts

2. 执行以下命令,生成字体的索引信息:

sudo mkfontscale

sudo mkfontdir

3. 运行fc-cache命令更新字体缓存。

sudo fc-cache

4. 重启wps即可,字体缺失的提示不再出现。

转自 http://www.cnblogs.com/liangml/p/5969404.html

Tags: ,
shuxin

ubutnu 16.04 lts 启用IBUS以及五笔字型

ubuntu 16.04安装后启用了fcitx,这个输入法比较老也比较知名,但是反应比较慢,有点老态的感觉,所以切换为ibus,然后添加五笔输入法,感谢效果很好

首先进入选项-语言支持,在下面“键盘输入法系统”中,切换选择为IBUS,然后关闭,重新启动系统

不重启系统,就需所杀死fctix,重启ibus-daemon

im-switch -s ibus

系统启动进入后,发现ibus只是默认英文输入,没有中文输入法,还需要再次添加英文输入法

打开终端,使用 apt-get安装

sudo apt-get install ibus-pinyin ibus-table-wubi

安装后再次重启系统,进入选项-文本输入,在使用的输入源下面,点击+号,输入 ibus,就会显示拼音、极点五笔、海峰五笔,添加即可

Tags: ,
shuxin

ubuntu 14.04 安装Nginx 1.10.2,编译安装php5.2.17过程

以前在发表过一个编译PHP5.2.17的流程,写得比较乱,这次下单了vultr的VPS,特别编译了PHP5.2.17,使用Zend Optimizer v3.3.9,过程命令如下

安装最新版的NGINX

wget http://nginx.org/keys/nginx_signing.key
sudo apt-key add nginx_signing.key
sudo nano /etc/apt/sources.list

最后面添加NGINX源

	deb http://nginx.org/packages/ubuntu/ trusty nginx
	deb-src http://nginx.org/packages/ubuntu/ trusty nginx

安装nginx

sudo apt-get update
sudo apt-get install nginx

安装相关的库文件

sudo apt-get install -y git autoconf lynx wget build-essential libxml2-dev libssl-dev libbz2-dev libcurl4-openssl-dev  libpng12-dev libfreetype6-dev libxpm-dev libmcrypt-dev libmhash-dev libmysqlclient-dev libjpeg62-dev freetds-dev libjson-c-dev re2c

配置编译环境

sudo nano /etc/environment

添加

	LANG=en_US.UTF-8
	LC_ALL=en_US.UTF-8

重启

sudo reboot

下载php5.2.17

sudo mkdir /opt/source
cd /opt/source
sudo wget -c http://museum.php.net/php5/php-5.2.17.tar.bz2
sudo tar xvjf php-5.2.17.tar.bz2
cd /opt/source/php-5.2.17

添加补丁

SimpleXML patch for PHP 5.2.17

sudo curl -o php-5.2.17.patch https://mail.gnome.org/archives/xml/2012-August/txtbgxGXAvz4N.txt
sudo patch -p0 -b < php-5.2.17.patch

PHP-FPM patch for PHP 5.2.17

sudo wget -c http://php-fpm.org/downloads/php-5.2.17-fpm-0.5.14.diff.gz
sudo gunzip php-5.2.17-fpm-0.5.14.diff.gz
sudo patch -p1 < php-5.2.17-fpm-0.5.14.diff

OpenSSL Patch for PHP 5.2.17

sudo wget -c -t 3 -O ./debian_patches_disable_SSLv2_for_openssl_1_0_0.patch https://bugs.php.net/patch-display.php\?bug_id\=54736\&patch\=debian_patches_disable_SSLv2_for_openssl_1_0_0.patch\&revision=1305414559\&download\=1
sudo patch -p1 -b < debian_patches_disable_SSLv2_for_openssl_1_0_0.patch

Freetype support for PHP 5.2.17(仅适用于64位,32位系统不需要)

sudo mkdir -pv /usr/include/freetype2/freetype
sudo ln -sf /usr/include/freetype2/freetype.h /usr/include/freetype2/freetype/freetype.h

编译安装PHP5.2.17

sudo ./configure -enable-cli -prefix=/opt/source/php-5.2.17 -with-pear -with-iconv -with-curl -with-mysqli -with-mysql -with-libdir=/lib/x86_64-linux-gnu -enable-mbstring -enable-exif -with-gd -with-jpeg-dir -with-freetype-dir -with-zlib -with-zlib-dir -with-gettext -with-mhash -enable-ftp -enable-bcmath -with-mime-magic -with-pdo-mysql -with-openssl -with-mcrypt -enable-sockets -enable-soap -enable-calendar -enable-fastcgi -enable-force-cgi-redirect -enable-fpm
sudo make
sudo make install
sudo cp /opt/source/php-5.2.17/php.ini-dist /opt/source/php-5.2.17/lib/php.ini 

加PHP.INI,运行查看PHP版本

bin/php-cgi -v 

返回即表示安装成功

PHP 5.2.17 (cgi-fcgi) (built: Jun 15 2017 07:54:11)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2010 Zend Technologies
    with Zend Optimizer v3.3.9, Copyright (c) 1998-2009, by Zend Technologies

配置FPM

sudo cp /opt/source/php-5.2.17/sapi/cgi/fpm/init.d/php-fpm.in /etc/init.d/php-fpm5217
sudo chmod +x /etc/init.d/php-fpm5217
sudo nano /etc/init.d/php-fpm5217 
	php_fpm_BIN=/opt/source/php-5.2.17/bin/php-cgi
	php_fpm_CONF=/opt/source/php-5.2.17/etc/php-fpm.conf
	php_fpm_PID=/opt/source/php-5.2.17/logs/php-fpm.pid 
sudo nano /opt/source/php-5.2.17/etc/php-fpm.conf 
		127.0.0.1:9001
		www-data
		www-data
		Unix user of processes
		www-data
		Unix group of processes
		www-data

启动php-fpm进程

sudo service php-fpm5217 start

添加php-fpm自启动

sudo update-rc.d php-fpm5217 defaults

php5.2.17安装完成

请注意上面没有安装xcache,可以编译添加即可

shuxin

php5.2.17编译安装后添加XCACHE和OPENSSL支持

头一次编译安装php5.2.17,结果XCACHE和openssL没有添加,折腾了好久,终于成功,补上过程,方便查询:
系统是ubuntu 14.04,php5.2.17

请注意,我安装的php目录是/opt/source/php-5.2.17
Xcache编请注意,我安装的php目录是/opt/source/php-5.2.17译安装:
下载xcache

wget https://xcache.lighttpd.net/pub/Releases/3.2.0/xcache-3.2.0.tar.gz
tar zxvf xcache-3.2.0.tar.gz
cd xcache-3.2.0.tar.gzsudo /opt/source/php-5.2.17/bin/phpize
sudo ./configure --prefix=/opt/source/php-5.2.17/lib/php/extensions --with-php-config=/opt/source/php-5.2.17/bin/php-config --enable-xcache  
sudo make  
sudo make install

会生成xcache.so动态扩展文件,此文件的位置是
/opt/source/php-5.2.17/lib/php/extensions/no-debug-non-zts-20060613
编辑PHP.INI,载入这个动态扩展就可以了,需要将下载的源码包中的xcache.ini文件的内容添加到php.ini文件:
重新启动PHP-FPM即可:
sudo service php-fpm5217 restart
在源码包中还有htdocs目录,这个是WEB管理界面,可以将其拷贝到WEB目录中

安装OPENSSL

php5.2.17源目录ext目录中有OPENSLL的源码,只是在编译时忘记添加了,所以也是使用phpize来编译添加即可
请注意,我安装的php目录是/opt/source/php-5.2.17

cd /opt/source/php-5.2.17/ext/openssl
sudo /opt/source/php-5.2.17/bin/phpize

结果提示没有找到config.m4文件,源目录中的文件名不一致:

sudo cp config0.m4 config.m4

编译openssl

sudo /opt/source/php-5.2.17/bin/phpize
sudo ./configure --prefix=/opt/source/php-5.2.17/lib/php/extensions --with-php-config=/opt/source/php-5.2.17/bin/php-config --with-openssl
sudo make
sudo make install 

生成的openssl.so动态扩展文件还是位于/opt/source/php-5.2.17/lib/php/extensions/no-debug-non-zts-20060613
在php.ini文件中添加 openssl扩展,重启php-fpm,就可以看到php-info中已经添加SSL支持:


OpenSSL support enabled
OpenSSL Version OpenSSL 1.0.1f 6 Jan 2014

shuxin

ubuntu 14.04安装PHP7.0的简单办法

PHP7.0的效率非常高,兼容性也很好,wordpress等一些比较常见的系统都可以完美的支持PHP7,我论坛使用php5.5时,页面的生成时间是0.15秒左右,更新使用php7.0以后,页面的生成时间只在0.05~0.07秒,效率提高好多,内存占用也低了不少
因为我以前是用的PPA来安装的PHP,在UBUNTU14.04中,也要使用PPA来安装,当然有时间可以自己编译,我闲编译太烦,apt-get安装方便,安装模块也是随手就安装,非常方便,2分钟就可以升级完:
如果以前安装过PPA的PHP,就可以省掉下面的过程,否则需要安装才可以找得到PHP7的源:
sudo add-apt-repository ppa:ondrej/php
更新源:
sudo apt-get update
停用PHP5-FPM:
sudo service php5-fpm stop
移除原来的PHP5:(我的站点使用的是NGINX-FPM)
sudo apt-get remove --purge php5-fpm php5-cgi php5-mysql php5-curl php5-mcrypt php-pear php5-gd php5-xcache
sudo apt-get autoremove

安装PHP7
sudo apt-get install php7.0 php7.0-cli php7.0-fpm php7.0-gd php7.0-json php7.0-mysql php7.0-readline php7.0-xml php7.0-mbstring php7.0-curl
安装后自动启动
修改NGINX的配置文件,PHP解析部分更改为:
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

配置文件目录也由/etc/php5更改为/etc/php/7.0

shuxin