月度归档: 2016 年 5 月

  • 经典战争片《危机13小时》

    爆炸贝导演的《危机13小时》中的经典台词:

    他战死在一个本不该去的地方,
    He died in a place he didn’t need tobe,

    死于一场不明缘由的战役,
    in a battle over something he doesn’t understand,

    死于一个对他来说毫无意义的国度。
    in a country that meant nothind to hime.

    影片改变自2012年9月11日美国驻利比亚大使史蒂文斯遇袭身亡

    同样值得推荐的电影《孤独的生还者》。

  • PHP self 和 static 区别

    PHP self 指向定义的 class。

    PHP static 指向运行的 class,一般只有子类覆盖父类的 static 成员或者方法时,在父类中使用 static 会访问到子类。

    class ParentClass
    {
        public static function hello()
        {
            echo "ParentClass: hello\n";
        }
    
        public static function run()
        {
            self::hello();
            static::hello();
        }
    }
    
    class ChildClass extends ParentClass
    {
        public static function hello()
        {
            echo "ChildClass: hello\n";
        }
    }
    
    ParentClass::run();
    
    // 输出
    "ParentClass: hello"
    "ParentClass: hello"
    
    ChildClass::run();
    
    // 输出
    "ParentClass: hello"
    "ChildClass: hello"
  • 在Linux上进行PHP安装configure错误小结

    PHP 安装,从官网下载源码压缩包,进行 configure 遇到几个错误:

    configure 命令

    ./configure –prefix=/usr/local/php –with-config-file-path=/usr/local/php/etc –with-bz2 –with-curl –enable-ftp –enable-sockets –disable-ipv6 –with-gd –with-jpeg-dir=/usr/local –with-png-dir=/usr/local –with-freetype-dir=/usr/local –enable-gd-native-ttf –with-iconv-dir=/usr/local –enable-mbstring –enable-calendar –with-gettext –with-libxml-dir=/usr/local –with-zlib –with-pdo-mysql=mysqlnd –with-mysqli=mysqlnd –with-mysql=mysqlnd –enable-dom –enable-xml –with-libdir=lib64 –enable-pdo –enable-fpm

    BZip2 错误

    configure: error: Please reinstall the BZip2 distribution

    解决方案

    yum install bzip2
    yum install bzip2-devel

    bzip2 可能已经安装过,bzip2-devel 没有安装

    libcurl 错误

    configure: error: Please reinstall the libcurl distribution –
    easy.h should be in <curl-dir>/include/curl/

    解决方案

    yum install curl-devel

    GD 库错误

    configure: error: jpeglib.h not found

    解决方案

    yum install libjpeg
    yum -y install libjpeg-devel

    libjpeg 可能已经安装过,libjpeg-devel 没有安装

  • MySQL设置root远程访问、内网访问

    使用 root 登录 mysql 服务器

    use mysql;
    // 设置 root 支持来自任意客户端可以访问
    update user set host = ‘%’ where user = ‘root’;

    // 设置 root 支持来自内网 IP 192.168.* 可以访问
    update user set host = ‘192.168%’ where user = ‘root’;

    user 中可能有多条 root 记录,执行上述语句更新时,可以先查询出 host、user 列表(select host,user from mysql.user),执行 update 语句时增加一个 where 条件判断,只更新其中一个 host。

  • Linux开启启动脚本

    Linux开机启动,启动 mysql,log,web service 等,将执行脚本的命令放置在 /etc/rc.d/rc.local 中,系统启动之后自动执行。

    比如在 rc.local 增加一行 /web/server/nginx, 用于启动 nginx 服务。

    Linux启动步骤

    1. 加载BIOS
    2. 读取MBR
    3. Boot Loader / Grup
    4. 加载内核
    5. 用户层init依据inittab文件来设定运行等级
    6. init进程执行rc.sysinit
    7. 启动内核模块
    8. 执行不同运行级别的脚本程序(/etc/rc.d/rc $RUNLEVEL # $RUNLEVEL为缺省的运行模式 )
    9. 执行/etc/rc.d/rc.local(初始化完成后执行 rc.local 中的命令)
    10. 执行/bin/login程序,进入登录状态
  • 单字母标签列表

    HTML 定义的一个字母标签列表

    标签 说明
    a 定义超链接
    b 定义粗体文本
    i 定义斜体文本
    p 定义段落
    q 定义简短的行内引用,区别于 <blockquote> 定义块引用
    s 定义删除线文本,是 <strike> 的缩写,但在 HTML 4.01 不赞成使用这两个标签,推荐使用 <del> 替代,目前浏览器仍然支持
    u 定义下划线文本,在 HTML 4.01 不赞成使用,目前浏览器仍然支持
  • 修改SVN提交log

    采用SVN进行代码管理,在平时开发中常遇到代码提之后,查看提交日志,发现提交的comment跟实际功能不够贴切,想要优化。或者代码提交之后发现没有写comment,想要补充。

    TortoiseGit 默认必须填写comment,TortoiseSVN没有限制,难免出现点击提交按钮时没有填写comment。

    使用TortoiseSVN修改comment,大致遇到

    ask the administrator to create a pre-revprop-change hook

    这样的提示。

    怎样 create a pre-revprop-change hook ?

    在 Linux 系统下:

    1. 进入 svn 仓库的 hooks 目录
    2. 拷贝 pre-revprop-change.tmpl 为 pre-revprop-change
    3. 给 pre-revprop-change 增加执行权限

    完成设置,重新使用 TortoiseSVN 修改comment即可。

  • SVN无法显示Log

    使用TortoiseSVN无法查看文件提交日志,在服务器执行 svn log wp-login.php 看到的信息是

    svn: Item is not readable

    此时修改 svnserve.conf 文件,将 anon-access = read 修改为 anon-access = none

    # 修改前
    anon-access = read
    # 修改后
    anon-access = none

    再次执行 svn log wp-login.php 可以看到文件提交日志。

  • 修改WordPress标题分隔符

    我的博客升级到 4.5.1 之后,网页标题的分隔符从中文竖线“|”变成了“-”,刚开始看着不太习惯,而且发现源代码中“–”被转义成了实体“&#8211;”,这样看着更不舒服。

    于是尝试修改WordPress网页标题分隔符。

    刚开始仍然想使用“|”作为分隔符,后来决定参考网页标题分隔符采取哪一种比较好。

    关于标题分隔符的建议:http://jingyan.baidu.com/article/bad08e1eae3fbb09c851213c.html

    发现腾讯和网易都采用“_”作为标题分隔符,于是也计划改成“_”。

    WordPress似乎没有提供配置修改网页标题分隔符。

    修改方法

    修改文件 wp-includes/general-template.php

    // 第 1022 行
    // 修改前
    $sep = apply_filters( 'document_title_separator', '-' );
    // 修改后
    $sep = apply_filters( 'document_title_separator', '_' );
    
    // 第 1038 行
    // 修改前
    $title = implode( " $sep ", array_filter( $title ) );
    // 修改后
    $title = implode( "$sep", array_filter( $title ) );
    
  • 同步目录到七牛CDN

    基于七牛SDK实现目录上传和同步

    使用官方提供的PHP SDK实现,重新使用PHP实现目录同步,而不是使用官方提供的Windows 程序,主要是因为 qrsbox.exe 会同步目录下的所有文件,包括 .svn 文件和一些项目配置文件,如 .project

    七牛的PHP SDK下载地址:http://developer.qiniu.com/code/v7/sdk/php.html

    本次实现的源码有几个功能:

    1. 同步普通文件,不同步英文点号开始的文件,比如 .svn、.project
    2. 将同步日志直接存放在同步的目录下,跟随 svn 进行管理
    3. 多机使用 svn 管理目录,在多机上进行同步,不会将整个项目重新同步,qrsbox.exe 将同步日志存放在 C 盘的用户目录,每在一台机器 checkout 项目,进行同步时都会完整地同步一次
    4. 通过 bat 脚本调用 php 代码,认证信息和 bucket 信息配置在源码中,每个 bat 脚本对应各自的 bucket,不再像 qrsbox.exe 切换 bucket 需要重新配置
    5. 增量同步,基于同步日志实现

    PHP脚本每次执行都会比较目录下的所有文件,以此判断是否需要同步。

    同名不同内容文件上传时会提示文件已存在,先删除旧文件,再提交新文件。

    没有实现的功能:

    1. 目录监控,实时上传(比较少遇到实时将开发环境代码更新到生产环境)
    2. 断点续传(CDN较多存放小文件)
    3. 没有实现同步文件删除(同 qrsbox.exe)