免费CDN-七牛云存储

个人用的虚拟主机,空间和流量都有限制,服务器又不在大陆,虽说香港速度是不错,但是终究是比不上内陆的,而且便宜东西,稳定性总是有点不尽人意.于是想用cdn来加速网站,同时也相对增加了空间的容量.

注册免费的CDN–七牛云存储

很早就打算使用cdn来加速网站了,不过免费的cdn还真不多,就算有,限制也多,速度也不行,即使是百度的加速乐,用起来也不怎么样,而且没有备案的域名不能用内陆的节点,结果就是我香港的主机用加速乐加速后反而访问慢了,还经常出问题,玩了几天就放弃了.

后来由于博客加了一些插件,自己也写了一些额外的功能,结果打开网站请求数有四五十,其中一旦某个请求卡住了,网页可能要几十秒才能打开,这简直是丧心病狂的用户体验,于是又想到了用cdn来加速,这次用的是七牛云存储,其实去年就知道了这个cdn,当时是使用了一个插件,作者有推荐这个cdn,不过一直没去详细了解.现在了解了一下,发现这个cdn的免费额度比较高,而且使用基本没限制,操作更是简单.

注册成为标准用户后即可永久获得以下免费额度:

  • 10GB永久免费存储空间
  • 每月10GB下载流量
  • 每月10万次Put请求
  • 每月100万次Get请求

不过直接注册后应该是体验用户,额度比较少

  • 储存空间1GB
  • 每月Put请求1万次
  • 每月下载流量1GB
  • 每月Get请求10万次
  • 创建1个空间
  • 仅支持富媒体上传(实测 图片 css 音频都正常使用,js文件不行 )

体验用户升级为标准用户也是免费的,不过需要实名验证,包括邮箱电话和身份证.

我注册完成后开始测试效果,由于本站请求数大部分是js文件,因此体验用户权限的加速并不明显,不过作为空间的扩展,图片音频都用cdn,节省了不少带宽,也很不错.

接下来开始升级标准用户,资料验证完,提示要2个工作日处理,等了两天,升级成功,把js文件,css文件,以及附件全部同步到cdn上,这次测试发现加速效果明显,然后发现一些高级功能需要余额10元以上才能用,比如防盗链,想想也不是大钱,于是百度了一个优惠码,九折冲了十块,开启了防盗链,大功告成!

七牛云存储最大的优点就是一键镜像功能,填写要镜像的站的域名就好了,然后就可以用七牛的地址访问源地址的文件,不需要手动上传文件到cdn,第一次访问,cdn会自动从源地址读取文件并保存到七牛服务器,下一访问就是直接从七牛服务器拉资源.

如果是wordpress,可以使用wp super cache的cdn功能,把url设为七牛分配的域名就行了,然后七牛上面开启一键镜像,如果是体验用户,注意要排除js文件.

当然,wordpress也有七牛自己推荐的专用插件,七牛镜像存储 WordPress 插件:一键实现 WordPress 博客静态文件 CDN 加速.专用插件,支持更多功能.

也有其他的插件,比如DISCUZX的.

七牛云存储也支持绑定自己的域名,不过需要备案的域名,默认分配的域名看起来很乱,不过https的域名倒是可以自己设置为qbox.me的二级域名,这样看起来好多了,原谅强迫症…

由于我只是使用了最简单的镜像cdn功能,所以并没有探索高级用法,对于单纯的网站cdn加速,七牛完全做到了傻瓜式操作,现在好像是有七牛FUSION融合CDN管理平台(BETA版)这个东西,于是我申请了体验,不知道是个啥,到时候在看看.

说了这么多,推广链接总是要放一个的,通过我的推广链接注册成标准用户,每位用户可以让我增加5gb流量!Thanks! 😉

https://portal.qiniu.com/signup?code=3lg4o1bji6vde

 

测试CDN服务器

缓解服务器流量压力,测试CDN服务器!

内有图片以及高音质音频,音频使用html5技术加载,虽然考虑到移动设备流量问题,已经设置为手动加载音频,但是由于html5在各浏览器表现不一,实际测试有些手机浏览器依然直接加载了音频.因此在无wifi情况下慎入!

徐小薇-夜空中最亮的星

周杰伦-默

花粥-远在北方孤独的鬼

PHP 检查文件大小

定义和用法

filesize() 函数返回指定文件的大小。

若成功,则返回文件大小的字节数。若失败,则返回 false 并生成一条 E_WARNING 级的错误。

语法

filesize(filename)
参数 描述
filename 必需。规定要检查的文件。

提示和注释

提示:本函数的结果会被缓存。请使用 clearstatcache() 来清除缓存。

例子

<?php
echo filesize("test.txt");
?>

PHP 清除文件状态缓存

1.定义和用法

clearstatcache() 函数清除文件状态缓存。

有时函数会缓存某些函数的返回信息,以便提供更高的性能。但是有时候,比如在一个脚本中多次检查同一个文件,而该文件在此脚本执行期间有被删除或修改的危险时,你需要清除文件状态缓存,以便获得正确的结果。要做到这一点,就需要使用 clearstatcache() 函数。

会进行缓存的函数,即受 clearstatcache() 函数影响的函数:

  • stat()
  • lstat()
  • file_exists()
  • is_writable()
  • is_readable()
  • is_executable()
  • is_file()
  • is_dir()
  • is_link()
  • filectime()
  • fileatime()
  • filemtime()
  • fileinode()
  • filegroup()
  • fileowner()
  • filesize()
  • filetype()
  • fileperms()

语法

clearstatcache()

PHP 获取文件最后修改时间

1.定义和用法

filemtime() 函数返回文件内容上次的修改时间。

若成功,则时间以 Unix 时间戳的方式返回。若失败,则返回 false。

语法

filemtime(filename)
参数 描述
filename 必需。规定要检查的文件。

说明

本函数返回文件中的数据块上次被写入的时间,也就是说,文件的内容上次被修改的时间。

2.提示和注释

提示:本函数的结果会被缓存。请使用 clearstatcache() 来清除缓存。

3.实例

$a=filemtime("log.txt");
echo "修改时间:".date("Y-m-d H:i:s",$a).";

JS 定时执行代码

1.前言

使用Ajax技术做动态加载的网站,有时也需要定时拉取服务器信息,比如给登录用户发送消息之类的.这里介绍两个函数,setInterval开始定时执行一个任务,clearInterval终止指定的任务.

2.setInterval定义和用法

setInterval() 方法可按照指定的周期(以毫秒计)来调用函数或计算表达式。

setInterval() 方法会不停地调用函数,直到 clearInterval() 被调用或窗口被关闭。由 setInterval() 返回的 ID 值可用作 clearInterval() 方法的参数。

语法

setInterval(code,millisec[,"lang"])
参数 描述
code 必需。要调用的函数或要执行的代码串。
millisec 必须。周期性执行或调用 code 之间的时间间隔,以毫秒计。

返回值

一个可以传递给 Window.clearInterval() 从而取消对 code 的周期性执行的值。

3.clearInterval定义和用法

clearInterval() 方法可取消由 setInterval() 设置的 timeout。

clearInterval() 方法的参数必须是由 setInterval() 返回的 ID 值。

语法

clearInterval(id_of_setinterval)
参数 描述
id_of_setinterval 由 setInterval() 返回的 ID 值。

4.实例

下面这个例子将每隔 50 毫秒调用 clock() 函数。您也可以使用一个按钮来停止这个 clock:

<html>
<body>

<input type="text" id="clock" size="35" />
<script language=javascript>
var int=self.setInterval("clock()",50)
function clock()
 {
 var t=new Date()
 document.getElementById("clock").value=t
 }
</script>
<button onclick="int=window.clearInterval(int)">Stop interval</button>

</body>
</html>

AJAX新增加的内容不能响应事件

刚开始接触AJAX,先是直接JS写,代码比较多,后来直接用JQ来写方便多了,在写AJAX的时候,发现由AJAX加载的内容却不能响应JS/JQ的事件,百度一下,总算了解了一点…

在需要动态加载的内容绑定事件的时候,可以用.on ,这是jq的方法.

$(document).on('click',"button",function(){
//事件触发后的处理
});

用这样的方式绑定button控件的click事件,即使button控件是ajax动态加载的,也会正常执行.

.on( events [, selector ] [, data ], handler(eventObject) )

以上是.on的描述.

PHP 解决mysql结果集转json后中文乱码

做了一个ajax的站,php后台处理完了数据库后,需要把结果以json数据的方式发到前端由js使用,编程这东西,编码总是会莫名其妙造成影响…

//$result是一个mysql查询的结果集
while($row = mysql_fetch_array($result)){
	foreach ( $row as $key => $value ) {  
		$row[$key] = urlencode ( $value );
	}  
	$urlencode_result[$i++]=$row;
}
$json = urldecode(json_encode($urlencode_result));

以上代码,首先把结果集中的每个值都urlencode来解决可能出现的编码问题,然后json_encode,把已经urlencode处理过的转成json数据,最后把json数据中被urlencode的数据恢复.

原理就是PHP的json_encode会把中文转成乱码,但是在json_encode前先urlencode,这样就没有中文了,转为json后没有问题,转换完,要用的时候在urldecode恢复中文数据.

你可能还需要看看PHP读取MYSQL数据后中文乱码的解决方法

PHP 直接POST数据

做模拟登陆或者后台任务的时候,可能会需要php在后台直接post数据到其他页面,并且获取返回结果来进行下一步处理.可能比较常用的是curl,不过在一些简单的地方使用,感觉有些麻烦,一个post要一大堆代码…

善用搜索引擎,发现了一个比较简单的post数据的方式,封装成一个函数方便调用.

function do_post_request($url, $data, $optional_headers = null)
  {
     $params = array('http' => array(
                  'method' => 'POST',
                  'content' => $data
               ));
     if ($optional_headers !== null) {
        $params['http']['header'] = $optional_headers;
     }
     $ctx = stream_context_create($params);
     $fp = @fopen($url, 'rb', false, $ctx);
     if (!$fp) {
        throw new Exception("Problem with $url, $php_errormsg");
     }
     $response = @stream_get_contents($fp);
     if ($response === false) {
        throw new Exception("Problem reading data from $url, $php_errormsg");
     }
     return $response;
  }

调用方法:

do_post_request($url,$data,$headers);
//第一个参数写post的对象,需要写绝对地址,例如"http://www.devsk.com"
//第二个参数写要post的数据,例如"a=1&b=2",目标页面$_POST['a']的值就是1,$_POST['b']的值就是2
//第三个参数可以不填,如果需要设置header,则可以在第三个参数输入,比如要传递cookie,可以写"Cookie:ID=123"
//函数返回值就是目标页面的输出
//完整的调用实例:
$result = do_post_request("http://www.devsk.com","a=1&b=2","Cookie:ID=123");
//向http://www.devsk.com页面post数据,包含两个变量(a=1 b=2)和一个cookie (ID=123).最后http://www.devsk.com页面的输出赋值给变量$result.

JS 操作COOKIE

JS本身没有直接操作cookie的函数,于是自己写了一个,可以读取,写入,删除cookie.

以下是代码:

setcookie('t','1','10');
//设置cookie,第一个参数是名称,第二个是值,第三个可选,表示有效时间,单位是秒
alert(getcookie('t'));
//获取cookie,参数是cookie名称
delcookie('t');
//删除cookie,参数是cookie名称
alert(getcookie('t'));

function setcookie(name,value,extime){
	var exdate=new Date();
	exdate.setTime(exdate.getTime()+extime*1000);
	document.cookie=name+ "=" +escape(value)+((extime==null) ? "" : ";expires="+exdate.toGMTString());
	}

function getcookie(name){
	var cookies = document.cookie.split("; ");
	for(var i = 0;i < cookies.length;i ++){
		var value = cookies[i].split("=");
		if(value[0] == name) {
			var value = unescape(value[1]);
			return value;
			}
		}
	}

function delcookie(name){
	var exdate=new Date()
	exdate.setDate(exdate.getDate()-1);
	document.cookie=name+ "=;expires="+exdate.toGMTString();
	}