解压
tar zxvf FileName.tar.gz
压缩
tar zcvf FileName.tar.gz DirName
解压
tar zxvf FileName.tar.gz
压缩
tar zcvf FileName.tar.gz DirName
Nginx 利用 IP2Locaion 模块实现地区负载均衡和IP定位。
由于GeoIP2的效率实在是“惊人”,和那“高到爆”的识别精度,真是让人想爆粗口。经过权衡,将IP定位模块更换为 IP2Locaion。
如果还没安装 IP2Location C Library,请先移步到 https://www.24kplus.com/linux/871.html 安装 IP2Location C Library
下载 Nginx IP2Locaion 模块
git clone https://github.com/ip2location/ip2location-nginx.git
查看当前 Nginx 版本信息
nginx -V
可以看到 Nginx 的版本为1.16.0 和 configure 参数,把 configure 参数拷贝保存下来,后面需要用到。
到官网 https://nginx.org/en/download.html 找到对应的版本源码下载并解压。本站以1.16.0为例:
下载并解压
wget https://nginx.org/download/nginx-1.16.0.tar.gz
tar -zxf nginx-1.16.0.tar.gz
cd nginx-1.16.0
备用下载地址: https://down.24kplus.com/linux/nginx-1.16.0.tar.gz
生成新的 nginx
把刚刚复制的 configure 参数粘贴到 ./configure
后面, 在结尾处加入 -–add-module=../ip2location-nginx
./configure \
--prefix=/etc/nginx \
.....
# 在结尾处加入一行
-–add-module=../ip2location-nginx
# 如果想编译为动态模块,则添加
--add-dynamic-module=../ip2location-nginx
make
编译好之后不要安装, 停止 nginx 服务
systemctl stop nginx
复制编译好的新 nginx 文件拷贝到sbin下
cp /usr/sbin/nginx /usr/sbin/nginx.bak
cp objs/nginx /usr/sbin
编辑 nginx.conf 文件,在 http {} 中加入以下代码:
http {
……
#doc https://github.com/ip2location/ip2location-nginx
# on 为启用,off 为禁用
ip2location on;
#/usr/share/IP2Location/IP2LOCATION-LITE-DB3.BIN 替换成你的 IP2Locaion 数据路径。
ip2location_database /usr/share/IP2Location/IP2LOCATION-LITE-DB3.BIN;
# 可选参数 ip2location_access_type file_io|shared_memory|cache_memory
# 默认为 shared_memory
# 建议不要选择 file_io, 否则可能会严重拖慢响应速度。
ip2location_access_type shared_memory
……
}
官方提供免费版BIN文件下载: https://lite.ip2location.com/ip2location-lite ,根据自己的需要下载对应版本。
编辑 fastcgi_params 文件,在结尾加入以下几行代码(可选):
#IP2Location, with ip2location on;
fastcgi_param IP_COUNTRY_CODE $ip2location_country_short;
fastcgi_param IP_COUNTRY_NAME $ip2location_country_long;
fastcgi_param IP_REGION_NAME $ip2location_region;
fastcgi_param IP_CITY_NAME $ip2location_city;
更多参数查考官方文档:https://github.com/ip2location/ip2location-nginx
启动 nginx 服务
systemctl start nginx
在 phpinfo 信息中可以看到:
当然,也可以在 nginx 中直接使用 $ip2location_country_short,$ip2location_region等变量来实现地区负载均衡。
wget -O IP2Location-C-Library-8.0.8.tar.gz https://codeload.github.com/chrislim2888/IP2Location-C-Library/tar.gz/8.0.8
tar -zxf IP2Location-C-Library-8.0.8.tar.gz
cd IP2Location-C-Library-8.0.8
备用下载地址:https://down.24kplus.com/linux/IP2Location-C-Library-8.0.8.tar.gz
autoreconf -i -v --force
./configure --prefix=/usr
make
make install
cd data
perl ip-country.pl
如果出现错误
configure.ac:42: error: possibly undefined macro: AC_PROG_LIBTOOL
If this token and others are legitimate, please use m4_pattern_allow.
See the Autoconf documentation.
执行:
yum install libtool libsysfs
cd test
./test-IP2Location
IP2Location API version: 8.0.8 (80008)
IP2Location IPv4 Testing passed.
IP2Location IPv6 Testing passed.
CentOS 安装 libtool 2.4.6, 解决 error: Libtool library used but 'LIBTOOL' is undefined
错误 。
wget http://ftpmirror.gnu.org/libtool/libtool-2.4.6.tar.gz
tar -zxf libtool-2.4.6.tar.gz
cd libtool-2.4.6
备用下载地址:https://down.24kplus.com/linux/libtool-2.4.6.tar.gz
./configure --prefix=/usr
make
sudo make install
sudo ldconfig
方法一、浏览器打开网址(国内可能无法正常访问):
https://www.google.com/chrome/browser/desktop/index.html?system=false&standalone=1
点击下载Chrome
然后点击接受并安装
方法二、点击链接直接下载(国内可正常下载)
//源Execl名称
string sourceExeclFileName = "C:\\SourceExecl.xlsx";
//目标Execl名称
string targetExeclFileName = "C:\\TargetExecl.xlsx";
using (ExcelPackage package = new ExcelPackage(new FileInfo(targetExeclFileName)))
{
using (ExcelPackage sourcePackage = new ExcelPackage(new FileInfo(sourceExeclFileName)))
{
//new sheet form copy为复制到目标Execl的SheetName
package.Workbook.Worksheets.Add("new sheet from copy", sourcePackage.Workbook.Worksheets[1]);
}
package.Save();
}
js 格式化数字,输出格式化后的字符串。
Number.prototype.format = function (format) {
if (!format) {
return this.toString();
}
var comma = ',',
dec = '.',
i18n = false,
neg = v < 0;
var v = Math.abs(this);
if (format.substr(format.length - 2) == '/i') {
format = format.substr(0, format.length - 2);
i18n = true;
comma = '.';
dec = ',';
}
var hasComma = format.indexOf(comma) != -1,
psplit = (i18n ? format.replace(/[^\d\,]/g, '') : format.replace(/[^\d\.]/g, '')).split(dec);
if (1 < psplit.length) {
v = v.toFixed(psplit[1].length);
} else if (2 < psplit.length) {
throw ('NumberFormatException: invalid format, formats should have no more than 1 period: ' + format);
} else {
v = v.toFixed(0);
}
var fnum = v.toString();
psplit = fnum.split('.');
if (hasComma) {
var cnum = psplit[0],
parr = [],
j = cnum.length,
m = Math.floor(j / 3),
n = cnum.length % 3 || 3,
i;
for (i = 0; i < j; i += n) {
if (i != 0) {
n = 3;
}
parr[parr.length] = cnum.substr(i, n);
m -= 1;
}
fnum = parr.join(comma);
if (psplit[1]) {
fnum += dec + psplit[1];
}
} else {
if (psplit[1]) {
fnum = psplit[0] + dec + psplit[1];
}
}
return (neg ? '-' : '') + format.replace(/[\d,?\.?]+/, fnum);
}
/// <summary>
/// 获取最后一天
/// </summary>
/// <returns>当月最后一天日期</returns>
public static DateTime GetMonthLastDay(DateTime date)
{
return date.AddDays(1 - date.Day).AddMonths(1).AddDays(-1);
}
/// <summary>
/// 获取日期是第几周
/// </summary>
/// <param name="date">日期</param>
/// <returns>第几周</returns>
public static int GetWeekOfYear(DateTime date)
{
//确定此时间在一年中的位置
int dayOfYear = date.DayOfYear;
//当年第一天
DateTime tempDate = new DateTime(date.Year, 1, 1);
//确定当年第一天
int tempDayOfWeek = (int)tempDate.DayOfWeek;
tempDayOfWeek = tempDayOfWeek == 0 ? 7 : tempDayOfWeek;
//确定星期几
int index = (int)date.DayOfWeek;
index = index == 0 ? 7 : index;
//当前周的范围
DateTime retStartDay = date.AddDays(-(index - 1));
DateTime retEndDay = date.AddDays(7 - index);
//确定当前是第几周
int weekOfYear = (int)Math.Ceiling(((double)dayOfYear + tempDayOfWeek - 1) / 7);
if (retStartDay.Year < retEndDay.Year)
{
weekOfYear = 1;
}
return weekOfYear;
}
WordPress 3.5以上的版本,隐藏了后台的媒体(Media)设置页面 上传路径(upload_path)和文件 URL 地址(upload_url_path)的设定。
将下面的代码添加到主题的 functions.php 即可恢复设置界面:
if(get_option('upload_path')=='wp-content/uploads' || get_option('upload_path')==null) {
update_option('upload_path',WP_CONTENT_DIR.'/uploads');
}