2016年10月

zip tar tar.gz tar.bz2 tar.xz jar 7z的压缩与解压

zip格式

压缩: zip -r tunps.com[目标文件名].zip tunps.com[原文件/目录名]
解压: unzip tunps.com[原文件名].zip
注:-r参数代表递归

tar格式(该格式仅仅打包,不压缩)

打包:tar -cvf tunps.com[目标文件名].tar tunps.com[原文件名/目录名]
解包:tar -xvf tunps.com[原文件名].tar
注:c参数代表create(创建),x参数代表extract(解包),v参数代表verbose(详细信息),f参数代表filename(文件名),所以f后必须接文件名。

tar.gz格式

方式一:利用前面已经打包好的tar文件,直接用压缩命令。
压缩:gzip tunps.com[原文件名].tar
解压:gunzip tunps.com[原文件名].tar.gz

方式二:一次性打包并压缩、解压并解包
打包并压缩: tar -zcvf tunps.com[目标文件名].tar.gz tunps.com[原文件名/目录名]
解压并解包: tar -zxvf tunps.com[原文件名].tar.gz
注:z代表用gzip算法来压缩/解压。

tar.bz2格式

方式一:利用已经打包好的tar文件,直接执行压缩命令:
压缩:bzip2 tunps.com[原文件名].tar
解压:bunzip2 tunps.com[原文件名].tar.bz2

方式二:一次性打包并压缩、解压并解包
打包并压缩: tar -jcvf tunps.com[目标文件名].tar.bz2 tunps.com[原文件名/目录名]
解压并解包: tar -jxvf tunps.com[原文件名].tar.bz2
注:小写j代表用bzip2算法来压缩/解压。

tar.xz格式

方式一:利用已经打包好的tar文件,直接用压缩命令:
压缩:xz tunps.com[原文件名].tar
解压:unxz tunps.com[原文件名].tar.xz

方式二:一次性打包并压缩、解压并解包
打包并压缩: tar -Jcvf tunps.com[目标文件名].tar.xz tunps.com[原文件名/目录名]
解压并解包: tar -Jxvf tunps.com[原文件名].tar.xz
注:大写J代表用xz算法来压缩/解压。

tar.Z格式(已过时)

方式一:利用已经打包好的tar文件,直接用压缩命令:
压缩:compress tunps.com[原文件名].tar
解压:uncompress tunps.com[原文件名].tar.Z

方式二:一次性打包并压缩、解压并解包
打包并压缩: tar -Zcvf tunps.com[目标文件名].tar.Z tunps.com[原文件名/目录名]
解压并解包: tar -Zxvf tunps.com[原文件名].tar.Z
注:大写Z代表用ncompress算法来压缩/解压。另,ncompress是早期Unix系统的压缩格式,但由于ncompress的压缩率太低,现已过时。

jar格式

压缩:jar -cvf tunps.com[目标文件名].jar tunps.com[原文件名/目录名]
解压:jar -xvf tunps.com[原文件名].jar
注:如果是打包的是Java类库,并且该类库中存在主类,那么需要写一个META-INF/MANIFEST.MF配置文件,内容如下:

Manifest-Version: 1.0
Created-By: 1.6.0_27 (Sun Microsystems Inc.)
Main-class: the_name_of_the_main_class_should_be_put_here

然后用如下命令打包:

jar -cvfm tunps.com[目标文件名].jar META-INF/MANIFEST.MF tunps.com[原文件名/目录名]

这样以后就能用“java -jar tunps.com[文件名].jar”命令直接运行主类中的public static void main方法了。

7z格式

压缩:7z a tunps.com[目标文件名].7z tunps.com[原文件名/目录名]
解压:7z x tunps.com[原文件名].7z
注:这个7z解压命令支持rar格式,即:

7z x tunps.com[原文件名].rar

升级WampServer中Apache、PHP、MySQL版本

初到jjsj公司工作又近2个月。了解到公司从16年4月开始做EC的B2B商城。由于公司领导不懂技术。找到外包公司做了一个Java版本的系统短期快速上线后发现问题多多也找不到售后。功能修改的需求无法快速满足。又下线后重新采用PHP+ECShop重新开发了一套。前期Java版本在阿里云ECS CentOS上跑。后来ECShop上马又转到Windows Server 2008 R2 服务器环境用的是奇葩的IIS+PHP组合。确实是够折腾的。

三个月我把服务器上面的IIS卸载掉,转到WAMP环境(采用WampServer),我用的是WampServer2.0i.exe安装包,2009年发布的版本,包含:Apache2.2.11,PHP5.3.0,MySQL5.1.36。为什么要用这么老的版本?难道不怕security bug吗。非也非也。最新的ECShop源码2.7.3最高只能支持到PHP5.3。ECShop里面又很多引用新建对象代码:&new Object,这玩意儿在新版本PHP5.5及其以上的已经版本已经deprecated。

WampServer2.0i.exe里面的二进制都是采用VC6编译。而最新的一般都是VC9。这点需要注意。

虽然说AMP套件是跨平台开源软件,但实际上Windows平台一直都是被歧视的。所以找到对应版本的Win32 VC9 编译版确实是门学问。

这里:http://mirrors.cnnic.cn/apache//httpd/binaries/win32/ 有可以下载编译好的Win32版本。

Apache 2.2.11升级到2.2.31

到apachehaus下载 httpd-2.2.31-x86-r6.zip解压到D:\tunps.com\bin\apache\Apache2.2.31,将老版本(2.2.11)手动卸载。在cmd下运行:D:\tunps.com\bin\apache\Apache2.2.11\bin\httpd.exe -k uninstall,然后安装新版本:D:\tunps.com\bin\apache\Apache2.2.31\bin\httpd.exe -k install -n apache22,将老版本的conf目录覆盖到新版本的conf目录。修改PHP LoadModule的路径和ServerRoot:

ServerRoot "D:/tunps.com/bin/apache/apache2.2.31"

LoadModule php5_module "D:/tunps.com/bin/php/php5.3.29/php5apache2_2.dll"

然后重启Apahce让配置生效:D:\tunps.com\bin\apache\Apache2.2.31\bin\httpd.exe -k restart
注意:因为2.2.31用的是VC9编译,为了让httpd跑起来,必须确保服务器环境已经安装VC++ Redist 2008 SP1。

PHP 5.3.0升级到5.3.29

PHP也是同样的道理,官方php.net不提供win32而精致版,所以在apachelounge搜索到人家的编译版:

https://phpdev2.toolsforresearch.com/php-5.3.29-nts-Win32-VC9-x86.zip 
https://phpdev2.toolsforresearch.com/php-5.3.29-Win32-VC9-x86.zip 
https://phpdev2.toolsforresearch.com/php-5.3.29-nts-Win32-VC9-x64.zip 
https://phpdev2.toolsforresearch.com/php-5.3.29-Win32-VC9-x64.zip 

nts表示非线程安全,我们不需要这个。下载好之后解压到D:\tunps.com\bin\php\php5.3.29,将老版本PHP5.3.0的php.ini覆盖到5.3.29,并且覆盖一份到apache2.2.31\bin目录下。这样不用修改任何配置,可以直接使用。但是php.ini有一个地方还是要修改:

extension_dir = "D:/tunps.com/bin/php/php5.3.29/ext/"

MySQL 5.1.36升级到最新的5.7.16

因为PHP一般都是采用tcp socket和MySQL连接,所以兼容性要求并不高,哪怕PHP的MySQL扩展(php_mysqli.dll)还是5.0.8 2010年的版本,但还是可用。

到MySQL官网下载最新的MySQL win32压缩包(mysql-5.7.16-win32.zip),现在的MySQL安装包做得很大,有400MB左右,里面不仅仅包含二进制还是各种文档、各种语言的客户端连接library还有Visual Studio扩展等等。安装程序也不是十年那样的简陋,可以安装的过程中实现各种高级配置(端口、用户名、安全性设置 etc.)。

解压MySQL压缩包到D:\tunps.com\bin\mysql\mysql-5.7.16-win32,管理员cmd下安装MySQL:

mysqld --install mysql57

初始化数据:

mysqld --initialize

或者:

mysqld --initialize-insecure

没有加insecure的自动生成一个随机的root密码, root密码在:D:\tunps.com\bin\mysql\mysql-5.7.16-win32\data\<host name>.err 日志文件里面。加了insecure的,默认root没有密码。mysql -uroot -p登录后用

set password = password('tunps.com');

设置为新密码。

然后重新导入SQL文件即可。

如果不初始化mysql直接启动mysql服务会启动不起来,事件查看器eventvwr.msc报错:

failed to set datadir to D:\tunps.com\bin\mysql\mysql-5.7.16-win32\data\

phpMyAdmin 3.2.0.1升级到4.6.5.1

更炫的ajax操作,效率大为提升,下载后解压缩到D:\tunps.com\apps\phpMyAdmin-4.6.5.1-all-languages,修改D:\tunps.com\alias\phpmyadmin.conf里面Alias路径。

注意:以上所有的软件都是x86的。

phpMyAdmin 无法加载 mysqli 扩展,请检查您的 PHP 配置

昨天打算给公司的WAMP套件更新一下版本,更新完了Apahce、PHP、MySQL版本之后,结果浏览器打开phpMyAdmin报错:

phpMyAdmin 无法加载 mysqli 扩展,请检查您的 PHP 配置

首先想到的是打开php.ini配置查看php_mysql.dllphp_mysqli.dll扩展是否已经加载起来。

打开D:\wamp\bin\apache\Apache2.2.31\bin\php.ini,发现

extension=php_mysql.dll
extension=php_mysqli.dll

前面没有; 然后随便写一个phpinfo()http://tunps.com/info.php,查看mysqlmysqli扩展也是加载起来了的。

phpinfo

在困扰了我一个小时之后,偶然将用IE浏览器可以正常打开phpMyAdmin,并且可以正常登录。然后返回到Chrome开发浏览器还是一样的红色标题报错。那么到此真相大白。是Chrome缓存的问题,清空缓存了一些正常。这里不得不吐槽一下phpMyAdmin的报错设计。又错误直接给你跳转到http://tunps.com/error.php,浏览器缓存后就一直跳转到这里页面,就算问题解决了也是这样。坑啊!!!

微信公众号redirect_uri参数错误的解决办法

  1. 登陆微信后台,进入“接口权限”设置 https://mp.weixin.qq.com/advanced/advanced?action=table&token=1078672290&lang=zh_CN
  2. 定位到“网页授权获取用户基本信息”,点击右边的“修改”
  3. 出现“网页授权域名”,点击右边的“设置”。
  4. 在弹出的“授权回调页面域名:”下输入您的网站域名(不加http://),并且将MP_verify_***********.txt文件上传到网站的服务指定目录下。
  5. 点击“确认”,如果提示“通过安全监测”表示设置已经保存。

ECShop判断是否是手机移动端函数

function checkmobile() {
    $mobile = array();
    static $touchbrowser_list =array('iphone', 'android', 'phone', 'mobile', 'wap', 'netfront', 'java', 'opera mobi', 'opera mini',
                'ucweb', 'windows ce', 'symbian', 'series', 'webos', 'sony', 'blackberry', 'dopod', 'nokia', 'samsung',
                'palmsource', 'xda', 'pieplus', 'meizu', 'midp', 'cldc', 'motorola', 'foma', 'docomo', 'up.browser',
                'up.link', 'blazer', 'helio', 'hosin', 'huawei', 'novarra', 'coolpad', 'techfaith', 'palmsource',
                'alcatel', 'amoi', 'ktouch', 'nexian', 'ericsson', 'philips', 'sagem', 'wellcom', 'bunjalloo', 'maui', 'smartphone',
                'iemobile', 'spice', 'bird', 'zte-', 'longcos', 'pantech', 'gionee', 'portalmmm', 'jig browser', 'hiptop',
                'benq', 'haier', '^lct', '320x320', '240x320', '176x220', 'windows phone');
    
    static $pad_list = array('ipad');

    $useragent = strtolower($_SERVER['HTTP_USER_AGENT']);

    if(dstrpos($useragent, $pad_list)) {
        return false;
    }
    if(($v = dstrpos($useragent, $touchbrowser_list, true))){
        return  true;
    }
    $brower = array('mozilla', 'chrome', 'safari', 'opera', 'm3gate', 'winwap', 'openwave', 'myop');
    if(dstrpos($useragent, $brower)) return false;

}

返回true表示移动端,false表示PC平台。