如果不更换域名,直接拷贝,重新解析即可,请保持数据库名和用户名密码与原来一致即可.
如不一致,请在配置文件config.php中进行修改
新环境必须PHP版本一致,不然会出错.
后台登录后,再打开路径
http://www.youurl.com/admin.php?c=a_sys&a=ecache&run=1
进行缓存清理
然后就完成了.
我站在青青的牧场
如果不更换域名,直接拷贝,重新解析即可,请保持数据库名和用户名密码与原来一致即可.
如不一致,请在配置文件config.php中进行修改
新环境必须PHP版本一致,不然会出错.
后台登录后,再打开路径
http://www.youurl.com/admin.php?c=a_sys&a=ecache&run=1
进行缓存清理
然后就完成了.
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 磁盘合并前,先备份数据到服务器之外的位置.
我的情况是系统盘只有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
如果没出错,就可以看到磁盘合并的效果了.
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.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版批量查询百度关键词排名源码.
其中部分参考了网上的代码,然后自己完善了一下.
主要用于查询网站关键词在百度的排名情况
默认查询前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
其实就两个步骤,一个注意点.
步骤一: 首先去除空格
$v
= trim(
$_REQUEST
[
'v'
]);
步骤二: 然后通过换行符拆分成数组
$v_arr
=
explode
(
"rn"
,
$v
);
一个注意点
换行符要用双引号 "rn".
本文仅作一例子,不保证适用所有网站,请知悉,风险自担.
起因,之前搭建的一个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 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