November 4, 2013
PHP 多台服务器 session 用Memcached存储Session
"php实现多服务器共享session的方法:\n多服务器共享session的方法:\n1.通过NFS文件共享的方式,多台WEB服务器共享保存session文件的磁盘 2.保存在数据库中,这种方式的扩展性很强,可以随意增加WEB而不受影响 3.可以将session数据保存在memcached中,memcached是基于内存存储数据的,性能很高,用户并发量很大的时候尤其合适,参考PHP实现多服务器session共享之memcache共享 4.文件方式保存session时,可以采用php的扩展eaccelerator来存储sesion\nphp中的Session默认是用文件的方式存储的,如果用多台WEB服务器,Session共享可能就会成为一个大的问题,可以用NFS共享的方式来存储,但是对于并发请求更多的站点来说,用NFS也会出现问题,下面就说说用Memcached来保存Session的问题。\nvi memcached_session.php,输入如下的代码\n$ip = \u0026#39;192.168.1.111\u0026#39;; $port = 11211; …"
October 31, 2013
Golang import使用说明
"我们在写Go代码的时候经常用到import这个命令用来导入包文件,而我们经常看到的方式参考如下:\nimport( \u0026#34;fmt\u0026#34; ) 然后我们代码里面可以通过如下的方式调用\nfmt.Println(\u0026#34;hello world\u0026#34;) 上面这个fmt是Go语言的标准库,他其实是去goroot下去加载该模块,当然Go的import还支持如下两种方式来加载自己写的模块:\n1.相对路径\nimport “./model” //当前文件同一目录的model目录,但是不建议这种方式来import 2.绝对路径\nimport “shorturl/model” //加载gopath/src/shorturl/model模块\n上面展示了一些import常用的几种方式,但是还有一些特殊的import,让很多新手很费解,下面我们来一一讲解一下到底是怎么一回事\n1.点操作\n我们有时候会看到如下的方式导入包\nimport( . \u0026#34;fmt\u0026#34; ) 这个点操作的含义就是这个包导入之后在你调用这个包的函数时,你可以省略前缀的包名,也就是前面你调用的fmt.Println(“hello …"
October 22, 2013
安装zeromq时,出现 error while loading shared libraries: libzmq.so 错误的解决办法
"Is this on Ubuntu? You’ll need to add /usr/local/lib to ldconfig to be able to use ZeroMQ. Here’s a web page with some info: http://ubuntuforums.org/showthread.php?t=420008\nHere are the actual instructions:\nAdd /usr/local/lib to a new line in ld.so.conf:\n$ sudo vi /etc/ld.so.conf Rerun ldconfig:\n$ sudo ldconfig That should work (if I remember correctly). Let me know if you have any issues."
October 22, 2013
golang实现验证电子信箱和手机格式合法性(正则表达式)
"邮箱验证\nfunc checkEmail(email string) (b bool) { if m, _ := regexp.MatchString(\u0026#34;^([a-zA-Z0-9\\_-])+@([a-zA-Z0-9\\_-])+(.[a-zA-Z0-9_-])+\u0026#34;, email); !m { return false } return true } 手机验证\npackage main import ( \u0026#34;regexp\u0026#34; ) const ( regular = \u0026#34;^(13[0-9]|14[57]|15[0-35-9]|18[07-9])\\\\d{8}$\u0026#34; ) func validate(mobileNum string) bool { reg := regexp.MustCompile(regular) return reg.MatchString(mobileNum) } func main() { if validate(\u0026#34;13888888888\u0026#34;) { println(\u0026#34;是手机号\u0026#34;) return } …"
October 22, 2013
[必读]golang语言报错信息fatal error: all goroutines are asleep – deadlock!
"出错信息fatal error: all goroutines are asleep – deadlock! 出错信息的意思是: 在main goroutine线,期望从管道中获得一个数据,而这个数据必须是其他goroutine线放入管道的 但是其他goroutine线都已经执行完了(all goroutines are asleep),那么就永远不会有数据放入管道。 所以,main goroutine线在等一个永远不会来的数据,那整个程序就永远等下去了。 这显然是没有结果的,所以这个程序就说“算了吧,不坚持了,我自己自杀掉,报一个错给代码作者,我被deadlock了” 例子:\npackage main func main() { c := make(chan bool) go func() { c \u0026lt;- true }() \u0026lt;-c //这里从c管道,取到一个true \u0026lt;-c //这行导致deadlock,因为这时的c管道,永远都取不到数据(注释掉这行就不报错) } "
October 22, 2013
golang日志模块测试
"package main import ( \u0026#34;fmt\u0026#34; \u0026#34;log\u0026#34; \u0026#34;os\u0026#34; ) func main(){ logfile,err := os.OpenFile(\u0026#34;d:/workspace/golang/test.log\u0026#34;,os.O\\_RDWR|os.O\\_CREATE|os.O_APPEND,0); if err!=nil { fmt.Printf(\u0026#34;%s\\r\\n\u0026#34;,err.Error()); os.Exit(-1); } defer logfile.Close(); logger := log.New(logfile,\u0026#34;\\r\\n\u0026#34;,log.Ldate|log.Ltime|log.Llongfile); logger.Println(\u0026#34;hello\u0026#34;); logger.Println(\u0026#34;oh….\u0026#34;); logger.Fatal(\u0026#34;test\u0026#34;); logger.Fatal(\u0026#34;test2\u0026#34;); } 这里打开日志文件的时候,同时使用 …"
October 11, 2013
Linux 之 /etc/profile、~/.bash_profile 等几个文件的执行过程
"在登录Linux时要执行文件的过程如下: 在刚登录Linux时,首先启动 /etc/profile 文件,然后再启动用户目录下的 ~/.bash_profile、 ~/.bash_login或 ~/.profile文件中的其中一个,\n执行的顺序为:~/.bash_profile、 ~/.bash_login、 ~/.profile。\n如果 ~/.bash_profile文件存在的话,一般还会执行 ~/.bashrc文件。\n因为在 ~/.bash_profile文件中一般会有下面的代码:\nif [ -f ~/.bashrc ] ; then . ./bashrc fi ~/.bashrc中,一般还会有以下代码:\nif [ -f /etc/bashrc ] ; then . /etc/bashrc fi 所以,~/.bashrc会调用 /etc/bashrc文件。最后,在退出shell时,还会执行 ~/.bash_logout文件。\n执行顺序为: /etc/profile -\u0026gt; (~/.bash_profile | ~/.bash_login | ~/.profile) -\u0026gt; …"
October 7, 2013
php框架–php框架的连贯查询实现原理
"如果你是一名使用过多种框架的php程序员,你一定见过这样的查询语句:\n$result = $mysqlDb-\u0026gt;limit(’0,10′)-\u0026gt;order(‘id desc’)-\u0026gt;findall(); 上面的查询语句,连续使用-\u0026gt;操作符进行操作,并最终返回一个查询结果,那么这是如何实现的呢。\n我们来简单分析一下:\n-\u0026gt;操作符用来访问对象,上面的语句一共使用了3次-\u0026gt;操作符,而最后一次返回的是查询结果,这说明,前2次-\u0026gt;访问后,返回的应该是一个对象,因为在php中,如果你对一个非对象使用-\u0026gt;操作符是不可能的。这告诉我们,$mysql实例中的limit和order方法都返回一个对其所在类自身的引用即 return $this,了解了这一点,那么我们就可以实现连贯查询了。请看站长写的示例代码:\n/* *类功能:实现数据库的连贯查询操作 */ class mysql_query{ var $tbl=’user’;//要操作的表名 var $limit=”;//存储limit语句的变量 var $order=”;//存储order语句的变量 var …"
October 7, 2013
[翻译]绝妙的 channel
"在编写 golang 程序的过程中,channel 会经常使用。本文对 channel 的使用的确很特别,同时也非常实用。\n原文在此: http://dave.cheney.net/2013/04/30/curious-channels\n在编写 golang 程序的过程中,channel 会经常使用。本文对 channel 的使用的确很特别,同时也非常实用。\n原文在此:http://dave.cheney.net/2013/04/30/curious-channels\n翻译:http://mikespook.com/2013/05/%E7%BF%BB%E8%AF%91%E7%BB%9D%E5%A6%99%E7%9A%84-channel/#more-1635"
October 4, 2013
VIM编辑器下go语法高亮显示
"Go in Vim The standard Go distribution includes a Go syntax file for Vim in go/misc/vim/.\nInstallation Instructions Place $GOROOT/misc/vim/syntax/go.vim in ~/.vim/syntax/ and put the following in ~/.vim/ftdetect/go.vim:\n在go的安装目录里有/misc/vim/syntax 他 /misc/vim/ftdetect 两个目录,将里面的文件复制到~/.vim/相应的目录里即可。\nau BufRead,BufNewFile *.go set filetype=go\nExtras and Alternative Files An alternative indent file for Vim by Alecs King can be found here.\nAutocompletion The gocode daemon by nsf includes a vim script …"