解决ecshop后台频繁退出问题

ecshop后台有时候会自动登出,而且还会很频繁,频繁的自动登出就严重的影响到了后台使用。

首先我们可以通过 在后台登录时勾选保存登录来解决.

如果以上方法不能解决,可以尝试通过修改代码来解决.

打开/includes/lib_base.php

找到function real_ip()函数

修改成以下代码

function real_ip()
{
static $realip = NULL;

if ($realip !== NULL)
{
return $realip;
}

/*添加*/
if(isset($_COOKIE['real_ipd']) && !empty($_COOKIE['real_ipd'])){
$realip = $_COOKIE['real_ipd'];
return $realip;
}
/*添加*/

if (isset($_SERVER))
{
if (isset($_SERVER['HTTP_X_FORWARDED_FOR']))
{
$arr = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);

/* 取X-Forwarded-For中第一个非unknown的有效IP字符串 */
foreach ($arr AS $ip)
{
$ip = trim($ip);

if ($ip != 'unknown')
{
$realip = $ip;

break;
}
}
}
elseif (isset($_SERVER['HTTP_CLIENT_IP']))
{
$realip = $_SERVER['HTTP_CLIENT_IP'];
}
else
{
if (isset($_SERVER['REMOTE_ADDR']))
{
$realip = $_SERVER['REMOTE_ADDR'];
}
else
{
$realip = '0.0.0.0';
/*添加*/ setcookie("real_ipd", $realip, time()+36000, "/"); /*添加*/
}
}
}
else
{
if (getenv('HTTP_X_FORWARDED_FOR'))
{
$realip = getenv('HTTP_X_FORWARDED_FOR');
}
elseif (getenv('HTTP_CLIENT_IP'))
{
$realip = getenv('HTTP_CLIENT_IP');
}
else
{
$realip = getenv('REMOTE_ADDR');
}
}

preg_match("/[d.]{7,15}/", $realip, $onlineip);
$realip = !empty($onlineip[0]) ? $onlineip[0] : '0.0.0.0';

return $realip;
}

可以直接用上面的代码覆盖,记得提前备份.

手机站常用meta参数设置

手机站常用meta参数

<!-- 页面自适应 -->
<meta name="viewport" content="initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no">
<!-- 不让百度转码 -->
<meta http-equiv="Cache-Control" content="no-siteapp"/>
<!-- uc强制竖屏 -->
<meta name="screen-orientation" content="portrait">
<!-- QQ强制竖屏 -->
<meta name="x5-orientation" content="portrait">
<!-- UC强制全屏 -->
<meta name="full-screen" content="yes">
<!-- QQ强制全屏 -->
<meta name="x5-fullscreen" content="true">
<!-- UC应用模式 -->
<meta name="browsermode" content="application">
<!-- QQ应用模式 -->
<meta name="x5-page-mode" content="app">

nginx + frp 反向代理出现 502 Bad Gateway 错误

其实是nginx反向代理问题

现象:

frp服务器正常

frp客户机正常

两者nginx都正常,经过简单重启无效。

无法解决问题。

frp客户机上通过frp后的网站使用域名访问一直出现 502 Bad Gateway 错误。

但在frp客户机上通过本地ip可以正常访问。

 

通过网站查询获取解决方法

原因:nginx缓冲区太小问题,无法正常进行反代理。

只需要修改client_header_buffer_size和client_body_buffer_size的大小即可。

我是用的宝塔面板,在nginx的管理中修改以上两个配置即可。

 

扩展阅读:

https://www.cnblogs.com/jkko123/p/6294585.html

https://www.cnblogs.com/jpfss/p/10244608.html

nextcloud安卓同步


安卓客户端的同步默认是安装后新增的内容同步,之前的是不同步的。


不过在每个文件夹右下角的加号图标的第二个导入按钮里可以去选择批量上传的内容。


这里要注意,批量只支持文件夹内的文件全选。

 

建议安装F-Droid上的最新版,请设置包括不兼容的版本,可以安装最新版nextcloud安卓客户端.

正式版 https://f-droid.org/zh_Hans/packages/com.nextcloud.client

开发版 https://f-droid.org/zh_Hans/packages/com.nextcloud.android.beta

 

经测试,设置自动上传的文件夹,有新增图片,会进行即时识别秒传上服务器.

 

关于F-Droid

 

F-Droid 是一个 Android 平台上 FOSS(Free and Open Source Software,自由开源软件)应用程序的目录,并提供下载安装支持。使用客户端可以更轻松地浏览、安装及跟进您设备上的应用更新。

 

官网:https://f-droid.org/

centos7 磁盘合并

centos7 磁盘合并在服务器维护中很少用到,如果操作失误,很容易造成数据丢失,所以建议在进行centos7 磁盘合并前,先备份数据到服务器之外的位置.

我的情况是系统盘只有10G,很快占满了.只能把数据盘合并到系统盘来使用.数据盘是挂载过的(相关文章<Centos7磁盘挂载>),需要取消挂载操作,再格式化一下,进行合并.

如果情况不一样,可以参考来看本文.

一. 先看一下整个过程的命令

df -Th
fdisk -l
fdisk /dev/xvdb
df -hal
df -Th
mkfs.ext3 /dev/xvdb1 

pvcreate /dev/xvdb1 
lvdisplay
vgextend centos /dev/xvdb1 
vgdisplay
lvresize -L +9.5G /dev/centos/root
resize2fs /dev/centos/root (或者xfs_growfs /dev/centos/root)
df -hal

 

二. 然后分命令进行说明.

2.1 基础命令

df -TH 查看磁盘大小

fdisk -l 查看机器所挂硬盘个数及分区情况

2.2 如果第二磁盘未进行分区就要进行分区格式化操作

fdisk /dev/xvdb对数据盘进行分区。根据提示,依次输入 n,p,1,两次回车,wq,分区就开始了。(下面附一张网上找来的图片)

df -hal查看详细磁盘空间使用情况
df -Th
mkfs.ext3 /dev/xvdb1 格式化分区

如果之前格式化过磁盘并挂载过,只需要取消挂载就行,不需要进行以上步骤.

附取消挂载方法

打开/etc/fstab 删除对应的挂载语句即可,然后reboot

2.3 然后我们把分区合并到磁盘,进行以下多步操作

pvcreate /dev/xvdb1 创建物理卷
lvdisplay 显示逻辑卷属性,记住这里看到的VG Name 和 LV Name
vgextend centos /dev/xvdb1 将创建的物理卷加入到准备合并的磁盘所在的VG Name的组中,这里是centos
vgdisplay 显示LVM卷组的信息(查看物理卷及空间情况)
lvresize -L +9.5G /dev/centos/root  调整逻辑卷空间大小,其中路径中的centos是VG Name,root是LV Name,上面lvdisplay命令获取到的信息,这里的9.5G大小是/dev/xvdb1的大小9.8G的一部分,不要全部用完.
resize2fs /dev/centos/root (或者xfs_growfs /dev/centos/root)  动态扩容分区大小,如果resize2fs命令失败,请使用xfs_growfs
df -hal

 

最后记得reboot

如果没出错,就可以看到磁盘合并的效果了.

免费IP地址国家城市位置经纬度获取API

https://www.ip.la/

通过免费的IP地址API接口,可以无限制的获取IP地址的地理位置,精确到国家省份城市,获取经纬度.

简单使用方法

支持两种格式:txt和json

https://api.ip.la/en  获取英文的txt数据

https://api.ip.la/cn 获取中文的txt数据

https://api.ip.la/en?json  获取英文的json数据

https://api.ip.la/cn?json 获取中文的json数据

查询指定IP数据方法

http://freeapi.ipip.net/8.8.8.8
http://ip.taobao.com/service/getIpInfo.php?ip=8.8.8.8
https://ip.ws.126.net/ipquery?ip=8.8.8.8

http://pv.sohu.com/cityjson 搜狐

附机器翻译的https://www.ip.la/页面内容:

为何使用?

您是否需要以编程方式获取公共IP地址或IP地理位置?您是否有获取服务器公共IP地址的要求?您需要获取服务器的位置吗?无论什么原因,有时公共IP地址和IP地理位置API都很有用。

您应该使用IP.la,因为:

  • 您可以无限制地发起请求。
  • 您可以获取英文或中文位置数据。
  • 不记录访客信息。
  • 最后,IP.laIPIP.NET赞助并将长期稳定存在,请随时使用。

API使用

使用IP.la非常简单。你有两个选择。地址位置支持英文和中文。您可以直接获取公共IP(以纯文本格式),您可以获得JSON格式的公共IP。

- API URI 类型 样本输出(IPv4) 样本输出(IPv6)
得到IP https://api.ip.la text 8.8.8.8 2001:4860:4860 :: 8888
得到XFF(X-Forwarded-For) https://api.ip.la/xff text 8.8.8.8 2001:4860:4860 :: 8888
获取IP位置(英文) https://api.ip.la/en?json json
{
    “IP”: “172.104.94.100”,
    “地点”:{
        “COUNTRY_CODE”: “JP”,
        “COUNTRY_NAME”: “日本”,
        “省”:“东京”,
        “城市”:“品川”,
        “纬度”:“35.6130514”
        “东经”: “139.7344198”
    }
}
{
  “ip”:“2001:19f0:7001:5607:5400:1ff:fec7:13a9”,
  “地点”: {
    “城市”:“东京”,
    “country_code”:“JP”,
    “country_name”:“日本”,
    “纬度”:“35.709026”,
    “经度”:“139.731993”,
    “省”:“东京”
  }
}
获取IP位置(简体中文) https://api.ip.la/cn?json json
{
    “IP”: “172.104.94.100”,
    “地点”:{
        “COUNTRY_CODE”: “JP”,
        “COUNTRY_NAME”: “日本”,
        “省”: “东京都”,
        “城市”: “品川区”,
        “纬度”:“35.6130514”
        “东经”: “139.7344198”
    }
}
{
  “ip”:“2001:19f0:7001:5607:5400:1ff:fec7:13a9”,
  “地点”: {
    “city”:“东京”,
    “country_code”:“JP”,
    “country_name”:“日本”,
    “纬度”:“35.709026”,
    “经度”:“139.731993”,
    “省”:“东京都”
  }
}

获取请求的信息。

- API URI 类型 样本输出
获取请求标头 https://api.ip.la/header text
GET /标头HTTP / 1.1
主持人:api.ip.la
接受:* / *
用户代理:curl / 7.54.0

给PHP网站添加访问密码的方法

本文仅作一例子,不保证适用所有网站,请知悉,风险自担.

起因,之前搭建的一个DY站,一直用来自己看DY用.

前些日子被一个版权方发邮件通知,说是侵权了.

然后就把站给关停了.

年后回来,发现想看DY都不方便,就又重新开启,但又怕有侵权风险,所以就加个密码,自己看咯.

这是首页代码

<?php
//超时时间
@set_time_limit(120);
//内存限制 取消内存限制
@ini_set("memory_limit",'-1');
//ThinkPHP路径
define('THINK_PATH','./Lib/ThinkPHP');
//缓存路径
define('RUNTIME_PATH','./Runtime/');
//项目名称
define('APP_NAME','feifeicms');
//项目路径
define('APP_PATH','./Lib/');
//加载入口文件
require(THINK_PATH.'/ThinkPHP.php');
//实例化项目

$pwd="12345678";//这里是密码
if(@$_POST['pwd'] == $pwd || @$_COOKIE["pwd"] == $pwd){
setcookie("pwd", $pwd, time()+600);
  //
$App = new App();
//初始化
$App->run();
  //
}else{
?>
<!DOCTYPE>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>私人影院</title>
<meta name="keywords" content="影子的私人影院" />
<meta name="description" content="联系QQ925474725 邮箱 shadoweb@qq.com" />
</head>
  <body>
    <div style="width:100%;height:100%;border:0;display:block;vertical-align:middle;text-align: center;">
      <p>私人影院,输入正确口令进入</p>
      <form action="" method="post" style="display:block;width:50%;max-width:200px;margin:20px auto;">
      <input type="text" name="pwd" />
      <input type="submit" />
      </form>
    </div>
  </body>
</html>
<?php
}
?>

 

网站是用thinkphp开发的,其它同类型的网站也可以自己设置.

因为是自己用就把密码直接写在代码里了.如果你的网站是多人使用,可以考虑在后台添加一个设置密码的功能,然后绑定用户或者记录不同密码的登录记录.以便了解其他用户的使用情况.这里就不作深入了.

 

 

 

html网页中播放本地视频代码

起因,网站上要放一段视频,从第三方转载会有广告.

只能考虑在自己服务器上保存视频进行播放.

原生方式:

HTML 5 <video> 元素会尝试播放以 mp4、ogg 或 webm 格式中的一种来播放视频。如果均失败,则回退到 <embed> 元素。

<video width="320" height="240" controls>
  <source src="movie.mp4" type="video/mp4">
  <source src="movie.ogg" type="video/ogg">
  <source src="movie.webm" type="video/webm">
  <object data="movie.mp4" width="320" height="240">
    <embed src="movie.swf" width="320" height="240">
  </object> 
</video>

代码来源:http://www.runoob.com/html/html-videos.html

第三方播放器方式:

使用ckplayer播放器

代码

<script type="text/javascript" src="http://www.ckplayer.com/Public/ckplayer/x1/ckplayer.js"></script>
<div class="videosamplex">
    <video id="videoplayer" src="http://img.ksbbs.com/asset/Mon_1703/05cacb4e02f9d9e.mp4"></video>
</div>
<script type="text/javascript">
    var videoObject = {
	container: '.videosamplex',//“#”代表容器的ID,“.”或“”代表容器的class
	variable: 'player',//该属性必需设置,值等于下面的new chplayer()的对象
	poster:'pic/wdm.jpg',
	mobileCkControls:true,//是否在移动端(包括ios)环境中显示控制栏
	mobileAutoFull:false,//在移动端播放后是否按系统设置的全屏播放
	h5container:'#videoplayer',//h5环境中使用自定义容器
	video:'http://img.ksbbs.com/asset/Mon_1703/05cacb4e02f9d9e.mp4'//视频地址
    };
    var player=new ckplayer(videoObject);
</script>

本代码可以在多个平台上显示的风格一致,包括ios,安卓,PC端
代码中的js文件可以本地化,方便测试

来源:http://www.ckplayer.com/sampleX/ios.html

 

 

ThinkPHP Apache和Nginx伪静态规则整理

Apache

<IfModule mod_rewrite.c>
Options +FollowSymlinks -Multiviews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
</IfModule>

 

Nginx

    #伪静态
    location / {
        if (!-e $request_filename) {
        rewrite ^(.*)$ /index.php?s=$1 last;
        break;
        }
    }