作者归档:程序设计

WordPress只显示当前主题,不展示已安装主题列表

最近一个老站(WP)迁移到新的主机上之后,安装的主题仅展示在用的一个,重新安装WordPress新版也不管用,看了下相关代码发现用到了PHP的scandir函数,而新环境中PHP配置把此函数禁用掉了,需将php.ini 中disable_functions里面scandir去掉即可。


vi /usr/local/php/etc/php.ini

找到disable_functions这一行,然后把scandir 去掉;

然后重启 php 服务:service php-fpm restart (或:/etc/init.d/php-fpm restart )即可。

Rsync结合Inotify 实现Centos文件实时同步更新

一. 背景

随着应用系统规模的不断扩大,对数据的安全性和可靠性也提出的更好的要求,rsync在高端业务系统中也逐渐暴露出了很多不足,首先,rsync同步数据时,需要扫描所有文件后进行比对,进行差量传输。如果文件数量达到了百万甚至千万量级,扫描所有文件将是非常耗时的。而且正在发生变化的往往是其中很少的一部分,这是非常低效的方式。其次,rsync不能实时的去监测、同步数据,虽然它可以通过linux守护进程的方式进行触发同步,但是两次触发动作一定会有时间差,这样就导致了服务端和客户端数据可能出现不一致,无法在应用故障时完全的恢复数据。基于以上原因,rsync+inotify组合出现了!

恩,这是抄的别人的一句话,参见http://www.cnblogs.com/davidwang456/p/3684945.html

inotify 介绍

inotify是一种强大的、细粒度的、异步的文件系统事件控制机制。linux内核从2.6.13起,加入了inotify支持,通过inotify可以监控文件系统中添加、删除、修改、移动等各种事件,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况,而inotify-tools正是实施监控的软件。
继续阅读

Mac下iterm2一些配置

1.需要的时候把 iterm2 呼出来,不需要的时候自动隐藏.

我个人非常喜欢这个功能,需要的时候在屏幕顶部展示,不需要的时候隐藏不占地方

iTerm2 – Preferences – Keys

左侧 Hotkey 选项 勾选 Show/hide iTerm2 with a system-wide hotkey

并且可以在 Hotkey 文本框处 设置一个你喜欢的全局快捷键 ,我自己使用的是 option + command

这样不管你在干什么的时候,只要敲打你上面设置的热键,iterm2 直接呼出, 搜噶~~~

2.Preferences – Profiles – Terminal – Terminal Emulation – Report Terminal Type

将其中的 xterm 改成 xterm-256color,比如在 Vim 显示一些配色方案会好很多

3.复用上个会话的目录

Preferences – Profiles – Working Directory – Reuse previous session’s directory

分享一些关于iterm2 的快键键:

⌘ + Click:可以打开文件,文件夹和链接

⌘ + n:新建窗口

⌘ + t:新建标签页

⌘ + w:关闭当前页

⌘ + 数字 & ⌘ + 方向键:切换标签页

⌥⌘ + 数字:切换窗口

⌘ + enter:切换全屏

⌘ + d:左右分屏

⇧⌘ + d:上下分屏

⌘ + ;:自动补全历史记录

⇧⌘ + h:自动补全剪贴板历史

⌥⌘ + e:查找所有来定位某个标签页

⌘ + r & ⌃ + l:清屏

⌘ + /:显示光标位置

⌥⌘ + b:历史回放

⌘ + f:查找,然后用 tab 和 ⇧ + tab 可以向右和向左补全,补全之后的内容会被自动复制, 还可以用 ⌥ + enter 将查找结果输入终端

选中即复制,鼠标中键粘贴

yii批量插入的方法

在开发中遇到过这样问题,foreach循环插入数据时,表中只插入了循环的最后一条数据,而其它数据没有真实添加,追踪发现,内存地址中循环时新一条数据会覆盖前一条数据,解决办法是另起一个对象;

如下:

第一种方法

$model = new User();
foreach($data as $attributes)
{
     $_model = clone $model; //克隆对象
     $_model->setAttributes($attributes);
     $_model->save();
}

第二种方法

$model = new User();
foreach($data as $attributes)
{
      $model->isNewRecord = true;
      $model->setAttributes($attributes);
      $model->save() && $model->id=0;
}

Yii2.0 设置伪静态 / yii2.0 rewrite设置

1. 开启 apache 的 mod_rewrite 模块
打开apache/conf/httpd.conf,找到
LoadModule rewrite_module modules/mod_rewrite.so,然后去掉前的“#”符号;

2. 修改 apache httpd.conf中的 AllowOverride

把 AllowOverride None 修改为 AllowOverride All;

3. 两种方式任选其一

①在与index.php文件同级目录(web目录)下添加文件“.htaccess”

Options +FollowSymLinks
IndexIgnore */*
RewriteEngine on

# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# otherwise forward it to index.php
RewriteRule . index.php

②在httpd-vhost.conf中设置

<VirtualHost *:80>
ServerName www.yii.loc
DocumentRoot “D:/xampp/htdocs/study/basic/web”
<Directory “D:/xampp/htdocs/study/basic/web”>
# 开启 mod_rewrite 用于美化 URL 功能的支持(译注:对应 pretty URL 选项)
RewriteEngine on
# 如果请求的是真实存在的文件或目录,直接访问
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# 如果请求的不是真实文件或目录,分发请求至 index.php
RewriteRule . index.php
# …其它设置…
</Directory>
</VirtualHost>

4. 配置应用的urlManager

需要在config/web.php中的components数组下增加:

‘urlManager’ => [
‘enablePrettyUrl’ => true,
‘showScriptName’=>false,
‘rules’ => [
// your rules go here
],
// …
],
具体可用属性,可查阅API文档。

yii2.0与之前版本配置略有不同,根据文档显示:

http://www.yiiframework.com/doc-2.0/yii-web-urlmanager.html

如何识别微信内置浏览器访问(识别扫一扫来源)

最近给公司做App统一扫描下载入口时,遇到一个问题,安卓版微信会屏蔽apk的下载,于是在扫码时,需判断是否是微信扫码,下面提供PHP和Js两种判断方法:

 

JavaScript版本判断

function is_weixn(){
  var ua = navigator.userAgent.toLowerCase();
  if(ua.match(/MicroMessenger/i)=="micromessenger") {
    return true;
  } else {
    return false;
  }
}

 

PHP判断

function isWeixin(){
  $agent = strtolower($_SERVER['HTTP_USER_AGENT']);
  $is_weixin = strpos($agent, 'micromessenger') ? true : false ;
  return $is_weixin;
}

 

PHP的匿名函数及闭包

匿名函数在编程语言中出现的比较早,最早出现在Lisp语言中,随后很多的编程语言都开始有这个功能了, 目前使用比较广泛的Javascript以及C#,PHP直到5.3才开始真正支持匿名函数, C++的新标准C++0x也开始支持了。

匿名函数是一类不需要指定标示符,而又可以被调用的函数或子例程,匿名函数可以方便的作为参数传递给其他函数, 最常见应用是作为回调函数。

继续阅读

Git 中忽略某些文件或者文件夹

有些时候,你必须把某些文件放到Git工作目录中,但又不能提交它们,比如保存了数据库密码的配置文件啦,等等,每次git status都会显示“Untracked files …”,有强迫症的童鞋心里肯定不爽。

好在Git考虑到了大家的感受,这个问题解决起来也很简单,在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。

不需要从头写.gitignore文件,GitHub已经为我们准备了各种配置文件,只需要组合一下就可以使用了。所有配置文件可以直接在线浏览:https://github.com/github/gitignore

忽略文件的原则是:

  1. 忽略操作系统自动生成的文件,比如缩略图等;
  2. 忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库,比如Java编译产生的.class文件;
  3. 忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。

举个例子:

假设你在Windows下进行Python开发,Windows会自动在有图片的目录下生成隐藏的缩略图文件,如果有自定义目录,目录下就会有Desktop.ini文件,因此你需要忽略Windows自动生成的垃圾文件:

# Windows:
Thumbs.db
ehthumbs.db
Desktop.ini

然后,继续忽略Python编译产生的.pyc.pyodist等文件或目录:

# Python:
*.py[cod]
*.so
*.egg
*.egg-info
dist
build

加上你自己定义的文件,最终得到一个完整的.gitignore文件,内容如下:

# Windows:
Thumbs.db
ehthumbs.db
Desktop.ini

# Python:
*.py[cod]
*.so
*.egg
*.egg-info
dist
build

# My configurations:
db.ini
deploy_key_rsa

最后一步就是把.gitignore也提交到Git,就完成了!当然检验.gitignore的标准是git status命令是不是说“working directory clean”。

使用Windows的童鞋注意了,如果你在资源管理器里新建一个.gitignore文件,它会非常弱智地提示你必须输入文件名,但是在文本编辑器里“保存”或者“另存为”就可以把文件保存为.gitignore了。

小结

  1. 忽略某些文件时,需要编写.gitignore
  2. .gitignore文件本身要放到版本库里,并且可以对.gitignore做版本管理!
  3. 从版本库中删除
    $ git rm test.txt
    rm 'test.txt'
    $ git commit -m "remove test.txt"

忽略文件夹写法