使用 homebrew 安装 php-fpm

虽然在 OS X 上自带了 php-fpm 但是好多 ext 都没有,要装的话要自己编译,想想还是从 homebrew 里新装一个 php 吧。

在 homebrew 里安装 php-fpm 很简单:

brew tap homebrew/dupes
brew tap homebrew/versions
brew tap homebrew/php
brew install --without-apache --with-fpm php5x #这里需要把 x 换成版本号,比如 3, 4, 5, 6
brew install php5x-mcrypt php5x-memcache php5x-memcached ...

配置文件在 /usr/local/etc/php/版本号/ 目录下面

安装好后,可以在 /usr/local/sbin/ 目录下找到 php5x-fpm,这就是启动脚本了,赋予它执行权限

chmod a+x php5x-fpm

然后就可以 /usr/local/sbin/php5x-fpm {start|restart|stop} 了。

Max OSX Mavericks 搭建 nginx + php-fpm + mysql

虽然 Mac 下自带了 apache + php,得总归还是 nginx 用得顺手,所以打算在 Mac 下安装 nginx + php-fpm + mysql

安装 ningx

为了方便起见我直接从 brew 中安装了 ningx,Homebrew 的安装可以参见 Mac OS 中 Homebrew 的安装与使用

  1. 安装,终端下执行

    brew search nginx
    brew install nginx
  2. 配置

    配置文件在 /usr/local/etc/nginx 目录下面,依自己的喜好配置。

  3. 运行,终端下运行 ningx 即可,若 ningx 的运行端口指定为小于 1024 那么还需要 sudo 权限

  4. 其它

    #重新加载配置|重启|停止|退出
    nginx -s reload|reopen|stop|quit
    #测试配置是否有语法错误
    nginx -t

php-fpm

Mac OSX 10.9的系统自带了PHP、php-fpm,所以也省去了安装php-fpm的麻烦。

配置

cd /private/etc/
sudo cp php-fpm.conf.default php-fpm.conf
vim php-fpm.conf

然后依照自己的喜好做完配置,还有一点需要修改的是 error_log 的设置,默认编译的时候 log 所在的路径是不存在的,将它反注释,并手动指定一个路径,比如 /usr/local/var/log/php-fpm.log,所以这行看上去应该是这样的:

error_log = /usr/local/var/log/php-fpm.log

运行

sudo php-fpm

安装 mysql

  1. 安装

    mysql 我也从 brew 中安装了:

    brew install mysql
  2. 配置

    初始化 mysql 数据库

    mysql_install_db --verbose --user=`whoami` --basedir="$(brew --prefix mysql)" --datadir=/usr/local/var/mysql --tmpdir=/tmp

    这个时候 root 用户是没有密码的,这里给 mysql 的 root 用户设置密码:

    /usr/local/opt/mysql/bin/mysqladmin -u root password 'PASSWORD'

    进行一个安全设置,终端运行,它全引导我们进行一系列设置

    /usr/local/opt/mysql/bin/mysql_secure_installation

    设置 mysql 的配置文件 my.cnf (默认在 /usr/local/Cellar/mysql/版本号/my.cnf)

    设置开机启动(可选)

    ln -sfv /usr/local/opt/mysql/*.plist ~/Library/LaunchAgents
    Then to load mysql now:
    launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist

    常用命令

    mysql.server start #启动mysql服务
    mysql.server stop #关闭mysql服务

EOF

通过 SMTP 来检测邮箱的有效性

如何来检测一个 email 地址?一般就需要从邮件地址的 smtp 服务器来获取一些信息来判断。

假设我要检测 testmail@douban.com 这个地址是不是真存在:

首先需要取得 douban.com 这个域的 MX 记录:
dig douban.com MX

然后根据得到的 MX 地址来检测,用 telnet MX记录 端口号 来连接,然后输入命令:
verify

从结果中基本可以看到 testmail@douban.com 这个地址返回的是 250 状态,是存在的;而下面的 jfksdjglfdgld@douban.com 则返回了 550 状态,同时也可以从下面的描述语句中得到这个地址则是不存在的。
继续阅读通过 SMTP 来检测邮箱的有效性

收集一些常用的 alias

在 *NIX 系统下的 shell 如果用管道符 “|” 去搭配一些命令的话,可以创造出很多的应用,如果要熟练运用这些的话,需要非常熟悉这些命令的使用方法,还有要很强的记忆力。
这里有两个网站把一些常用的 alias 收集起来,选择一些加到 .bashrc 里去,可以大大提高我们的效率啊~

http://alias.sh/
http://rubytune.com/cheat

Yii 框架事务处理

最近有用 Yii + SQLite 进行一个应用的开发,但在插入大量数据的时候非常缓慢。究其原因,大约就是在每插入一个数据的时候就会有一次 IO 的操作,所以在这个时候引入事务处理就很有必要了,而且也可以保证数据的一致性。

那么,如何在 Yii 应用中引入事务处理呢?

$transaction = Yii::app()->db->beginTransaction(); //创建事务

// 将需要事务处理的操作放进try里
try {
     $a = XXX::model()->findByPk(X);
     $a->x = 1;
     $a->update();
     $b = YYY::model()->findByPk(Y);
     $b->y = 2;
     $b->update();

     $transaction->commit(); //提交事务会真正的执行数据库操作
} catch (Exception $e) {
     $transaction->rollback(); //如果操作失败, 数据回滚
}

tmux 的小定制

之前有接触 tmux,但一直没有深入学习,所以也对这个工具是云里雾里,前段时间也终于花了点时间看了这个工具,终于也可以用上了。。。

所谓 tmux, 是 BSD 实现的 screen 替代品,相对于 screen,它更加先进:支持屏幕切分,而且具备丰富的命令行参数,使其可以灵活、动态的进行各种布局和操作。除此之外,它还可以把不同用处的分屏和窗口布局用 session 进行分组。更棒的是 tmux 提供了丰富的配置项让我们来对它进行定制。还有它的 session 共享的功能,可以让两个人同时连到同个 server 的 tmux session,使两个人可以看到互相的操作。总之这又是一个神器。

配置参考了 这里

用rsync+ssh进行备份

利用 rsync + ssh 可以很快速地对网站进行异地备份。步骤也很简单:

1、先用ssh-keygen生成一对keygen,可以免密码进行访问,可选。

2、确认本机与过程机都有安装 rsync,因为 ssh session 会自己执行 rsync –server 以便两端算签章。

3、使用如下命令进行备份

指令1 – 远端 备份回 本端:

rsync -avl --delete -e ssh server_hostname:/var/lib/mysql/ /backup/

指令2 – 本端 传送到 远端:

rsync -avl --delete -e ssh /var/lib/mysql server_hostname:/backup/

如果 ssh 端口非默认的 22,则可以

rsync -avl --delete -e 'ssh -o port=PROT' /var/lib/mysql server_hostname:/backup/

继续阅读用rsync+ssh进行备份

Shell 快捷键(二)

Shell 快捷键 中,对 Linux Shell 下 Emacs 分割的快捷键组合进行
了整理和总结,为了方便对比记忆,这里重新根据功能进行归类。

光标移动

命令 说明
Alt + b 后移一个单词
Alt + f 前移一个单词
Ctrl + b 后移一个字符
Ctrl + f 前移一个字符
Ctrl + a 把光标移到行首
Ctrl + e 把光标移到行尾
ctrl + ← 光标移动到前一个单词开头
ctrl + → 光标移动到后一个单词结尾
Ctrl + x Ctrl + x 在 EOL 和当前位置移动光标

输入编辑

命令 说明
Ctrl + h 删除前一字符
Ctrl + d 删除当前字符
Ctrl + k 删除当前字符到行末
Ctrl + u 删除行首到当前字符
Ctrl + w 删除单词到当前字符
Alt + d 从当前位置向后删除单词
Alt + ← 从当前位置向前删除单词
—————- —————————————————————
Esc + t 互换相邻两个单词
Alt + t 互换相邻两个单词
Ctrl + t 互换相邻两个字符
—————- —————————————————————
ctrl + ? 撤消前一次输入
Alt + r 撤消前一次动作
—————- —————————————————————
Alt + l 小写当前单词
Alt + u 大写当前单词
Alt + c 首字母大写当前单词
—————- —————————————————————
^oldstr^newstr 替换前一次命令中字符串

终端管理

命令 说明
Ctrl + s 锁住终端
Ctrl + q 解锁终端
Ctrl + l 清除终端
Ctrl + d 退出终端
————– —————————————————————–
Ctrl + c 中止命令
Ctrl + z 挂起命令
ctrl + o 重复执行命令

命令历史

命令 说明
Ctrl + r 向后查询历史,增量地
Ctrl + s 向前查询历史,增量地
Alt + p 向后查询历史,非增量地
Alt + n 向前查询历史,非增量地
————— —————————————————————-
Ctrl + p / ↑ 显示上一条命令
Ctrl + n / ↓ 显示下一条命令
Alt + < 移动到历史的首行
Alt + > 移动到历史的末行
————— —————————————————————-
Alt + . 插入最后一个参数
Alt + _ 插入最后一个参数
Esc + . 插入最后一个参数
Esc + _ 插入最后一个参数
————— —————————————————————-
Ctrl + y 粘贴刚才所删除的字符
Ctrl + Alt + y 插入上条命令的第一个参数

自动完成

命令 说明
Alt + / 尝试自动完成文件名
Alt + ? 显示当前自动完成列表
Alt + * 插入所有可能自动完成

其他

命令 说明
Ctrl + i 同 Tab
Ctrl + j 同 Enter
Ctrl + v CHAR 输入特殊字符
Ctrl + x @ 显示所有的可用的主机名自动完成
Ctrl + x Ctrl + e 使用 vim 写入 script 一次执行
2T 命令行补全
(string)2T 命令行补全
$2T 列出系统变量
=2T 列出当前目录
/2T 显示整个目录结构,包括隐藏文件
./2T 只显示子目录,包括隐藏目录
*2T 只显示子目录,不包括隐藏目录
@2T “/etc/hosts” 文件的条目
~2T “/etc/passwd” 文件中系统所有的当前用户