wdoyo搬家方法

如果不更换域名,直接拷贝,重新解析即可,请保持数据库名和用户名密码与原来一致即可.

如不一致,请在配置文件config.php中进行修改

新环境必须PHP版本一致,不然会出错.

 

后台登录后,再打开路径

http://www.youurl.com/admin.php?c=a_sys&a=ecache&run=1

进行缓存清理

 

然后就完成了.

H5移动端调用手机摄像头拍照和选择相册图片上传

android
<input type="file" accept="image/*" multiple/>
IOS
<input type="file" accept="image/*;capture=camera" multiple/>

 

<!--调用相机-->
<input type="file" accept="image/*" capture="camera" />
<!--调用摄像-->
<input type="file" accepet="video/*" capture="camcorder" />
<!--调用录音-->
<input type="file" accept="audio/*" capture="microphone" />

accept表示可以打开的系统文件目录,capture表示可以捕获到的系统默认的设备。
其中,还有一个属性multiple,支持多选,当支持多选时,multiple优先级高于capture,所以只需要写成:

<input type="file" accept="image/*" multiple />

 

 

 

扩展阅读:

https://blog.csdn.net/jeffkxt/article/details/80472596

https://blog.csdn.net/yzzane/article/details/78642219

https://blog.csdn.net/lin_shuaixin/article/details/74517050

https://blog.csdn.net/u012054869/article/details/81669739

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

网页灰色代码 网页去除彩色代码 网页黑白代码

使用方法:

html{
  filter:progid:DXImageTransform.Microsoft.BasicImage(grayscale=1);
      filter: grayscale(100%);
      -webkit-filter: grayscale(100%);
      -moz-filter: grayscale(100%);
      -ms-filter: grayscale(100%);
      -o-filter: grayscale(100%);
      filter: url("data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg"><filter ….3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0"/></filter></svg>#grayscale"); 
      filter: progid:DXImageTransform.Microsoft.BasicImage(grayscale=1);
      filter: gray;
      -webkit-filter: grayscale(1); 
  }

这段代码可以变网页为黑白,将代码加到CSS最顶端就可以实现素装。

如果网站没有使用CSS,可以在网页/模板的HTML代码<head>和</head>之间插入


  <style>
  html{
  filter:progid:DXImageTransform.Microsoft.BasicImage(grayscale=1);
      filter: grayscale(100%);
      -webkit-filter: grayscale(100%);
      -moz-filter: grayscale(100%);
      -ms-filter: grayscale(100%);
      -o-filter: grayscale(100%);
      filter: url("data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg"><filter ….3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0"/></filter></svg>#grayscale"); 
      filter: progid:DXImageTransform.Microsoft.BasicImage(grayscale=1);
      filter: gray;
      -webkit-filter: grayscale(1); 
  }
  </style>

 

 

有一些站长的网站可能使用这个css 不能生效,是因为网站没有使用最新的网页标准协议

http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
http://www.w3.org/1999/xhtml">

请将网页最头部的替换为以上代码。

 

一个表单多个提交按钮

有时我们需要在一个表单中提交到多个位置,就需要设置多个提交按钮.

像常用的加入购物车和购买按钮

 

例子

<form id="sform" method="get" action="../shopcart" >

                            <input class="button" type="button" onclick="sform('add');" value="加入购物车"/>
                            <input class="button" type="button" onclick="sform('buy');" value="购买"/>

 

<script type="text/javascript">
function sform(val){
if(val =='add'){
//这里进行添加购物车
document.getElementById('sform').submit();
}elseif(val =='buy'){
//这里进行购买操作
document.getElementById('sform').submit();
}else{
document.getElementById('sform').submit();
}
};

 

 

 

 

 

 

 

PHP版批量查询百度关键词排名源码

起因,运营的一个网站因启用百度商家号(类似百家号),绑定的为网站域名,在百度搜索结果中,默认显示商家号名称,不再显示网址,造成查询排名不方便.特意从网站查找资料,然后才有了本文的PHP版批量查询百度关键词排名源码.

其中部分参考了网上的代码,然后自己完善了一下.

主要用于查询网站关键词在百度的排名情况

默认查询前5页有无排名

可以自行在代码中修改

因每次查询百度一个页面要大概1s的时长

每个词要查5页

所以要注意查询词的数量,以避免查询时间太长.

重要的是带宽和服务器性能要好.

不然会查询很慢.

下面是全部代码

<?php
ini_set('max_execution_time','0');
if(!ini_get('safe_mode')){set_time_limit(0);}
header('Content-type: text/html; charset=utf-8');
function search($keyword,$url,$ip ='113.102.128.247',$page = 1 ){
    $res='';
    if($page > 5){
        $res .= '<tr><td>'.$keyword.'</td><td>0</td><td>5页之外</td></tr>';
        return $res;
    }else{
    $pm = ($page - 1) * 10;
    $rsState = false;
    $enKeyword = urlencode($keyword);
    $firstRow = ($page - 1) * 10;
    $urls='https://www.baidu.com/s?ie=utf-8&wd='.$enKeyword.'&pn='.$firstRow;
    $curl = curl_init();
     $dir = pathinfo($urls);//以数组的形式返回路径的信息
     $host = $dir['dirname'];//路径
     $ref = $host.'/';
    curl_setopt($curl, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4 );
    curl_setopt($curl, CURLOPT_URL, $urls); // 要访问的地址    
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // 对认证证书来源的检查
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); // 从证书中检查SSL加密算法是否存在
    curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // 模拟用户使用的浏览器
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自动跳转
    curl_setopt($curl, CURLOPT_HTTPHEADER, array('X-FORWARDED-FOR:'.$ip, 'CLIENT-IP:'.$ip));//IP 
    if($ref){
      curl_setopt($curl, CURLOPT_REFERER, $ref);//带来的Referer
    }else{
    curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自动设置Referer
    }
    curl_setopt($curl, CURLOPT_HTTPGET, 1); // 发送一个常规的Post请求
    curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 设置超时限制防止死循环
    curl_setopt($curl, CURLOPT_HEADER, 0); // 显示返回的Header区域内容
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回
    $contents = curl_exec($curl);
    //print_r(curl_getinfo($curl));
    curl_close($curl);
    $preg='/<divs+class="f13"><as+target="_blank"s+href="[^>]+">[sS]*?</a></div>/i';
    preg_match_all($preg,$contents,$rs);
    foreach($rs[0] as $k=>$v){
        $pm++;
        if(strstr($v,$url)){
            $rsState = true;
            $res .='<tr><td><a target="_blank" href="http://www.baidu.com/s?wd='.$enKeyword.'&pn='.$firstRow.'">'.$keyword .'</a></td><td>'.$pm.'</td><td>第'. $page . '页</td></tr>';
        }
    }
    unset($contents);
    if($rsState === false){
        $res .= search($keyword, $url,$ip,++$page);
    }
    return $res;
    }
}

function getClientIp() {
    if (!empty($_SERVER['HTTP_CLIENT_IP'])) 
        $ip = $_SERVER['HTTP_CLIENT_IP']; 
    else if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) 
        $ip = $_SERVER['HTTP_X_FORWARDED_FOR']; 
    else if (!empty($_SERVER['REMOTE_ADDR'])) 
        $ip = $_SERVER['REMOTE_ADDR']; 
    else 
        $ip = 'err'; 
    return $ip; 
} 

if(isset($_REQUEST['submit'])){
    $time = explode(' ',microtime());
    $start = $time[0] + $time[1];
    $url = $_REQUEST['url'];
    //$ip = getClientIp(); 
    $res = '';
    $keywords=explode("rn", trim($_REQUEST['keyword']));
    foreach($keywords as $k=>$v){
    if(!empty($v) && $v != ' ' && $v != NULL)  $res .= search($v,$url);
    }
    $endtime = explode(' ',microtime());
    $end = $endtime[0] + $endtime[1];
    echo '<table border="1" cellspacing="0"><tr><td>关键词</td><td>排名</td><td>位置</td></tr>';
    echo $res;
    echo '</table><hr>程序运行时间: '.($end - $start);
    die();
}
?>
<!DOCTYPE>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>百度关键词排名查询</title>
</head>
<body>
<form action="" method="get">
<ul style="list-style:none;">
<li>
<span style="vertical-align: top;">关键字:</span><textarea name="keyword" rows="20" cols="40" wrap="hard"></textarea>
</li>
<li>
<span>url地址:</span><input type="text" name="url" size="40">
</li>
<li>
<input type="submit" name="submit" value="搜索">
</li>
</ul>
</form>
</body>
</html>

 

开源地址:

https://github.com/shadoweb/baidukeywords

 

 

给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