最近小鱼哥要做微信内置浏览器播放的小视频,o(︶︿︶)o 唉,微信和QQ自带的浏览器居然【解析视频异常,请重试】h264编码的MP4,经过多方打探和测试,发现地址是https就可以播放。这个应该跟微信的安全机制有关,没办法,只能将站点部署成https啦。可ssl证书卖得好贵哦,幸好在wdcp和lamp等论坛,发现let's Ensencrypt和塞班可以申请免费的SSL,就是麻烦点要续期,好了废话不多说,直接上干货,下面介绍在linux(centos6.4 64bit)下的申请。

1、下载letsencrypt

git clone https://github.com/letsencrypt/letsencrypt

01.jpg
2、打开目录letsencrypt

cd letsencrypt

3、检查和验证(这里可能会触发安装python)

./certbot-auto --help all

02.jpg
4、申请证书,将下面的邮箱和域名换成你的

./certbot-auto certonly --standalone --email guyuelangyu@163.com -d ldbzx.com -d zhibo.ldbzx.com

03.jpg

这里我安装时候出现80端口占用,所以多了小插曲

停止httpd

service httpd stop

04.jpg
5、再次申请证书
./certbot-auto certonly --standalone --email guyuelangyu@163.com -d ldbzx.com -d zhibo.ldbzx.com
05.jpg
重启httpd
service httpd start
06.jpg

6、申请成功后,/etc/letsencrypt/live/ldbzx.com(这个域名和上面的一致)下面会出现域名证书
07-1.jpg

这里就代表申请成功了,至于怎么部署看小鱼哥另外一篇文章。
07.jpg

说明:Let's Encrypt证书是有效期90天的,需要我们自己手工更新续期才可以。
./certbot-auto certonly --renew-by-default --email guyuelangyu@163.com -d ldbzx.com -d zhibo.ldbzx.com

1、把/home目录下面的mydata目录压缩为mydata.zip

zip -r mydata.zip mydata #压缩mydata目录

2、把/home目录下面的mydata.zip解压到mydatabak目录里面

unzip mydata.zip -d mydatabak

3、把/home目录下面的abc文件夹和123.txt压缩成为abc123.zip

zip -r abc123.zip abc 123.txt

4、把/home目录下面的wwwroot.zip直接解压到/home目录里面

unzip wwwroot.zip

5、把/home目录下面的abc12.zip、abc23.zip、abc34.zip同时解压到/home目录里面

unzip abc*.zip

6、查看把/home目录下面的wwwroot.zip里面的内容

unzip -v wwwroot.zip

7、验证/home目录下面的wwwroot.zip是否完整

unzip -t wwwroot.zip

8、把/home目录下面wwwroot.zip里面的所有文件解压到第一级目录

unzip -j wwwroot.zip

主要参数
-c:将解压缩的结果
-l:显示压缩文件内所包含的文件
-p:与-c参数类似,会将解压缩的结果显示到屏幕上,但不会执行任何的转换
-t:检查压缩文件是否正确
-u:与-f参数类似,但是除了更新现有的文件外,也会将压缩文件中的其它文件解压缩到目录中
-v:执行是时显示详细的信息
-z:仅显示压缩文件的备注文字
-a:对文本文件进行必要的字符转换
-b:不要对文本文件进行字符转换
-C:压缩文件中的文件名称区分大小写
-j:不处理压缩文件中原有的目录路径
-L:将压缩文件中的全部文件名改为小写
-M:将输出结果送到more程序处理
-n:解压缩时不要覆盖原有的文件
-o:不必先询问用户,unzip执行后覆盖原有文件
-P:使用zip的密码选项
-q:执行时不显示任何信息
-s:将文件名中的空白字符转换为底线字符
-V:保留VMS的文件版本信息
-X:解压缩时同时回存文件原来的UID/GID

在PHP中,可用is_writable()函数来判断一个 文件/目录 是否可写,详情如下:

参考

is_writable

(PHP 4, PHP 5)

is_writable — 判断给定的文件名是否可写

说明

bool is_writable ( string $filename )

如果文件存在并且可写则返回 TRUE。($filename 参数可以是一个目录名,即检查目录是否可写。 )

记住 PHP 也许只能以运行 webserver 的用户名(通常为 'nobody')来访问文件。不计入安全模式的限制。

Example #1 is_writable() 例子

<?php
$filename = 'test.txt';
if (is_writable($filename)) {
    echo 'The file is writable';
} else {
    echo 'The file is not writable';
}
?>

但是,上面那个函数在PHP4中是有BUG的,尤其是在Windows服务器下判断不准官方相关bug报告链接如下:
http://bugs.php.net/bug.php?id=27609
为了兼容各个操作系统,可自定义一个判断可写函数,代码如下:

/**
 * 判断 文件/目录 是否可写(取代系统自带的 is_writeable 函数)
 *
 * @param string $file 文件/目录
 * @return boolean
 */
function new_is_writeable($file) {
    if (is_dir($file)){
        $dir = $file;
        if ($fp = @fopen("$dir/test.txt", 'w')) {
            @fclose($fp);
            @unlink("$dir/test.txt");
            $writeable = 1;
        } else {
            $writeable = 0;
        }
    } else {
        if ($fp = @fopen($file, 'a+')) {
            @fclose($fp);
            $writeable = 1;
        } else {
            $writeable = 0;
        }
    }
 
    return $writeable;
}

原因:
默认对MP4、flv等播放资源进行了gzip的压缩(一般为省带宽,站点默认都带gzip)
解决思路:
使用.htaccess文件来限制gzip,对视频类型不作压缩,以下是代码

<IfModule mod_rewrite.c>
  SetOutputFilter DEFLATE
  SetEnvIfNoCase Request_URI .(?:m3u8|mp4)$ no-gzip dont-vary #设置不对后缀.m3u8和mp4的文件进行压缩
</IfModule>

注意:https证书的注册和部署教程 这里忽略

笔记:

1、修改站点地址siteurl,如果能登录后台则直接修改为https://www.kinmor.com,如果不能,则通过数据库进行修改,表options的siteUrl

2、config.inc.php加入下面一行代码

/* 开启HTTPS /
define('__TYPECHO_SECURE__',true);

判断当前环境是win还是linux,可使用php的函数php_uname

下面的代码:
Linux☞

if (stristr(php_uname(), "Linux")) {
 echo "当前系统为linux";
}

windows☞

if (stristr(php_uname(),"windows")){
 echo "当前系统为Windows";
}