Atom设置eclipse快捷键

Settings - Keybindings - 点击”your keymap file”

  1. 'atom-text-editor':
  2. 'alt-/': 'autocomplete-plus:activate'
  3. 'atom-text-editor:not([mini])':
  4. 'ctrl-d': 'editor:delete-line'
  5. 'atom-workspace atom-text-editor:not([mini])':
  6. 'alt-up': 'editor:move-line-up'
  7. 'alt-down': 'editor:move-line-down'
  8. '.platform-win32':
  9. 'ctrl-shift-R': 'fuzzy-finder:toggle-file-finder'
  10. 'ctrl-shift-T': 'fuzzy-finder:toggle-file-finder'
  11. '.platform-win32, .platform-win32 .command-palette atom-text-editor':
  12. 'ctrl-p': 'command-palette:toggle'
  13. '.platform-darwin, .platform-win32, .platform-linux':
  14. 'ctrl-l': 'go-to-line:toggle'

composer使用

最近看到php的composer感觉很好用, 这里记录一下使用方法

  1. 下载composer.phar放到项目目录 https://getcomposer.org/composer.phar

mac下用vbox安装ubuntu映射80端口

1. 首先在 /etc/pf.anchors/ 新建一个 com.vbox 文件内容如下:

  1. rdr pass on lo0 inet proto tcp from any to any port 80 -> 127.0.0.1 port 8080

其中lo0为你ifconfig时查询到的网卡的名字 80是tomcat端口,8080为你想转发的端口

注意: 在段落末尾一定要加换行,否则会报syntax error错误。

2. 然后使用 pfctl 命令检测配置文件

  1. sudo pfctl -vnf /etc/pf.anchors/com.vbox

3. 添加到主配置文件

pf启动时会自动装载/etc/pf.conf文件,因此将anchor文件链接到/etc/pf.conf,转发规则就会自动建立了。

在rdr-anchor “com.apple/*”下面增加:

  1. rdr-anchor "vbox"

在:load anchor “com.vbox” from “/etc/pf.anchors/com.apple”后添加:

  1. load anchor "vbox" from "/etc/pf.anchors/com.vbox"

最终修改后的pf.conf文件如内容如下

  1. scrub-anchor "com.apple/*"
  2. nat-anchor "com.apple/*"
  3. rdr-anchor "com.apple/*"
  4. rdr-anchor "vbox"
  5. dummynet-anchor "com.apple/*"
  6. anchor "com.apple/*"
  7. load anchor "com.apple" from "/etc/pf.anchors/com.apple"
  8. load anchor "vbox" from "/etc/pf.anchors/com.vbox"

4. 导入并运行PF命令(关键)

一定要注意导入并允许运行 pf的命令,一个是所有现在网上教程里写的下面这个:

  1. sudo pfctl -f /etc/pf.conf

上面这个在OSX Yosemite (10.10)应该没问题,但在我的OSX Yosemite (10.10.3)里是没有用的,要换成下面这个才能成功:

  1. sudo pfctl -evf /etc/pf.anchors/com.vbox

5. 设置pf开机自动打开

  1. sudo pfctl -e

添加的为-e参数,即enable

6. 如果不需要可关闭pf

  1. sudo pfctl -d

cms想法

关于字体图标

后台模块或按钮图标采用 http://www.iconfont.cn/ 的图标,
智能解析iconfont.css提取所有图标

关于模块

新建模块需要设置:
模块标识
模块名称
模块字段 (标识, 名称, 类型, 默认值, 新增验证函数, 更新验证函数)
  // 默认值可读取配置
  // 验证函数自动读取验证辅助类的方法和文档
列表显示字段
  // 字段显示有格式化方式, 自动读取格式化辅助类和文档
详情页显示字段
添加数据界面显示字段
编辑页面显示字段

排序字段和方式(asc|desc|自定义)
搜索字段
删除数据方式 (软删除, 直接删除)

验证辅助类

设计思想

  1. class Validate {
  2. public function username($value, $msg, $params...) {
  3. }
  4. }

分两个, 一个系统, 一个用户自定义

想到的辅助方法:
用户名,密码,邮箱,手机号,不能为空,长度限制,只允许英文,正则

通过获取类的注释, 在需要的地方列出验证方式列表

字段和数据格式化辅助类

设计思想

  1. class Format{
  2. public function toImgTag($value, $params....) {
  3. }
  4. }

分两个, 一个系统, 一个用户自定义

想到的辅助方法:
时间,状态,图片,关联表字段 (表名, 字段名, 分隔符)

通过获取类的注释, 在需要的地方列出格式化辅助方法列表

Netbeans配置远程调试ubuntu apache2 php5-xdebug

此配置方法适用于在虚拟机中搭建服务器环境, 在windows中编码的方式

1. 安装php5-xdebug

  1. sudo apt-get install php5-xdebug

2. 配置php.ini, 在最后添加xdebug配置项

  1. [xdebug]
  2. zend_extension="/usr/lib/php5/20131226/xdebug.so"
  3. xdebug.idekey="netbeans-xdebug"
  4. xdebug.remote_host=192.168.100.103
  5. xdebug.remote_connect_back=1
  6. xdebug.remote_port=9000
  7. xdebug.profiler_enable=on
  8. xdebug.remote_enable=on
  9. xdebug.remote_handle=dbgp

说明

  1. zend_extension="/usr/lib/php5/20131226/xdebug.so" # 这里根据php的版本不同, 日期路径也不一样
  2. xdebug.remote_host=192.168.100.103 # 主机的地址
  3. xdebug.remote_port=9000 # 主机netbeans的监听端口(工具 > 选项 > php > 调试 > 调试端口)

一对php的加密解密方法

一对php的加密解密方法

  1. <?php
  2. function system_encrypt($data, $key) {
  3. $str = serialize($data);
  4. $key = md5($key);
  5. $k = md5(rand(0, 100));
  6. $k = substr($k, 0, 16);
  7. $result = '';
  8. for ($i = 0; $i < strlen($str); $i++) {
  9. $result .= substr($str, $i, 1) ^ substr($key, $i % strlen($key), 1);
  10. }
  11. return base64_encode($result . $k);
  12. }
  13. function system_decrypt($str, $key) {
  14. $key = md5($key);
  15. $str = base64_decode($str);
  16. $len = strlen($str);
  17. $str = substr($str, 0, $len - 16);
  18. $result = '';
  19. for ($i = 0; $i < strlen($str); $i++) {
  20. $result .= substr($str, $i, 1) ^ substr($key, $i % strlen($key), 1);
  21. }
  22. $result = @unserialize($result);
  23. return $result ? : null;
  24. }
  25. $key = 'shuai';
  26. $data = ['uid' => 1, 'time' => time()];
  27. // 系统加密
  28. $result = system_encrypt($data, $key);
  29. echo $result . "\n\n";
  30. // 系统解密
  31. $value = system_decrypt($result, $key);
  32. var_dump($value);

php调用系统shell命令自动更新线上网站代码为git版本库最新版

我们开发网站经常使用git最为代码版本库管理功能, git可以方便多人合作和代码历史记录的保存, 很方便, 于是有很多人就直接把git版本库的代码直接部署到线上, 每次更新就用git pull 去更新网站的代码, 只是每次更新代码都需要ssh到服务器上, 很麻烦, 想到php可以执行系统命令, 就想到了用网页更新线上代码, 具体往下看

准备

  1. 你的网站是php写的
  2. 你网站的代码使用的是git clone的代码, 更新代码使用的是git pull方式

自动更新php文件

1 . 在网站根目录下新建 /update.php, 并写入下面的代码, 可以把DIR修改成网站所在目录, 如果是当前目录, 可以不修改.

  1. <?php
  2. chdir(__DIR__);
  3. echo '<pre>';
  4. echo shell_exec('/usr/bin/git pull 2>&1');

2 . 然后修改网站目录中的文件所有文件的权限为 0777
3 . 把 .git/config 文件的远程提交地址中加上帐号信息 https://username:password@git.xxx.com/xxxxx
4 . 然后就可以访问 http://xxx.com/update.php 来更新网站代码了

注意: 如果你的网站根目录是源码根目录, 要禁止http访问.git目录, 因为这里保存了你的git帐号

linux自动压缩apache日志的计划任务脚本

上线后的网站, apache的日志每天都会增长很多, 有时一天就是几个G, 要么关闭日志, 要么压缩保存, 这里提供一个定时压缩的脚本, 每天

步骤

  1. 创建备份压缩脚本
  2. 创建计划任务

1. 创建备份压缩脚本

在服务器上创建一个shell脚本文件, 写入以下内容
  1. now_date=`date -d yesterday +%Y_%m_%d`
  2. /usr/bin/gzip -c 日志文件路径/access.log > 压缩后的路径/access.log_${now_date}.gz
  3. echo "" > 日志文件路径/access.log
  4. /usr/bin/gzip -c 错误日志文件路径/error.log > 错误日志文件路径/error.log_${now_date}.gz
  5. echo "" > 错误日志文件路径/error.log
实例: /data/wwwlog/gzip_log.cron
  1. now_date=`date -d yesterday +%Y_%m_%d`
  2. /usr/bin/gzip -c /data/wwwlog/access.log > /data/wwwlog/access.log_${now_date}.gz
  3. echo "" > /data/wwwlog/access.log
  4. /usr/bin/gzip -c /data/wwwlog/error.log > /data/wwwlog/error.log_${now_date}.gz
  5. echo "" > /data/wwwlog/error.log

2. 创建计划任务

  1. 在命令行输入 crontab -e 调出计划任务配置文件
  2. 写入配置 10 0 * * * sh /data/wwwlog/gzip_log.cron
  3. esc :wq 回车保存

这样就可以在每天晚上 12点压缩日志了

使用php开发windows的cmd命令方法

最近心血来潮, 想做一些命令行工具, 用来备份数据库什么的, 但自己本身并不会windows的开发, 只会php, 于是就想到了用php写命令行工具, 所以, 想看懂这篇文章, 你需要会php就可以了, 了解一点cmd命令更好, 下面看设置方法.

准备工作

  1. 因为是工具, 我想到的是以后所有的命令行工具都放在统一的位置, 比如 D:/Tools/, 先按照下面的目录结构创建好目录
    1. 目录结构:
    2. - D:/Tools/ // 工具根目录
    3. - D:/Tools/shell/ // php功能脚本存放目录
    4. - D:/Tools/bin/ // 命令映射文件存放目录
  2. 配置系统的环境变量, 把 php的安装目录D:/Tools/bin/ 加入到系统环境变量里面
  3. 编写 php功能脚本 和 命令映射文件

php功能脚本实例

为了以后扩展方便, 一个工具我们就在D:/Tools/shell/创建一个目录, 多个工具就创建多个目录

最简单的当然就是输出 hello world 了

  1. 创建文件 D:/Tools/shell/hello/hello.php
  2. D:/Tools/shell/hello/hello.php 中写入 <?php echo 'hello world'; ?>
  3. 现在直接用cmd命令行运行 php D:/Tools/shell/hello/hello.php 就可以看到控制台输出 hello world

注: 如果没有输出, 应该是php的环境变量没有配置正确

命令映射

如果用php去运行我们的工具, 显然是不方便的, 我们需要的是在任何目录都可以 hello 然后输出 hello world, 这就需要用到命令映射文件了, windows有一种特殊的文件后缀是 .cmd的文件, 如果某个目录有 xxx.cmd文件, 就可以在那个目录用 xxx 去运行这个文件, 其实系统还会去寻找环境变量目录下是否存在xxx.cmd或 xxx.exe, 所以, 我们的命令映射文件其实就是一个 xxx.cmd, 然后让xxx.cmd里面去运行我们的脚本.

  1. 创建文件 D:/Tools/bin/hello.cmd
  2. D:/Tools/bin/hello.cmd 中写入 @php "D:\Tools\shell\hello\hello.php" %*
  3. 在命令行输入 hello 回车, 就会看到我们的 hello world

注: 如果没有运行成功, 说明环境变量没有配置成功, 配置正确后, 就可以使用 hello命令了, 后面就可以在hello.php写自己的处理程序了.

php中针对命令行的一些方法

  1. <?php
  2. getcwd(); // 获取当前命令行所在的目录
  3. $argv // 命令行参数集合, 第一个是脚本文件的路径, 第二个往后是参数
  4. __DIR__ // 当前脚本所在目录
  5. // 在命令行输出中文的方法
  6. function cecho($str) {
  7. if (PHP_OS == 'WINNT') {
  8. echo iconv('utf-8', 'gbk//IGNORE', $str) . "\n";
  9. } else {
  10. echo $str . "\n";
  11. }
  12. }
  13. cecho('中文提示信息');

angularjs的$http发送post请求

刚开始用angularjs的post方法时, 后台总是接收不到数据, 查了资料发现是因为angularjs的post提交方式和jquery的不一样, jquery默认就是模拟form提交数据, 而angularjs则使用的是 request payload, 所有使用$_POST是获取不到数据的, 解放方法:

  1. $http({
  2. url: url,
  3. method: 'post',
  4. headers: {
  5. 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
  6. },
  7. data: {
  8. order_id: orderId
  9. },
  10. transformRequest: function(obj) {
  11. var str = [];
  12. for (var p in obj) {
  13. str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
  14. }
  15. return str.join("&");
  16. }
  17. }).success(function(data, header, config, status) {
  18. // 正确返回
  19. }).error(function(data, header, config, status) {
  20. //处理响应失败
  21. });