exec: “pkg-config”: executable file not found in %PATH% 的解决办法

在windows下要用golang实现操作zeromq消息队列,发现在sublime下进行

go get -tags zmq_3_x github.com/alecthomas/gozmq

操作的时候,提示

# pkg-config –cflags libzmq libzmq libzmq libzmq
exec: “pkg-config”: executable file not found in %PATH%
exit status 2

原因是因为没有安装pkg-config.需要手动安装,并设置一下环境变量.pkg-config下载地址:http://ftp.acc.umu.se/pub/gnome/binaries/win32/dependencies/pkg-config_0.23-3_win32.zip (http://ftp.acc.umu.se/pub/gnome/binaries/win64/dependencies/pkg-config_0.23-2_win64.zip)

如果无法下载,直接打开所在的目录,找到合适的软件包下载.然后将包里bin目录里的pkg-config.exe放在一个目录,在新建一个"环境变量",变量名为 PKG_CONFIG_PATH .值为pkg-config.exe所在的目录即可. Continue reading

用golang发送邮件

用golang发送邮件
配置文件 conf.json

[javascript]{
"Username": "sunxxg@163.com",
"Password": "123456",
"Smtphost":"smtp.163.com:25"
}[/javascript]
主程序  sendmail.go
[java]
package main

import (
"encoding/json"
"fmt"
"io"
"log"
"net/smtp"
"os"
"strings"
)

type cfgmail struct {
Username string
Password string
Smtphost string
}

type cfg struct {
Name, Text string
}

func main() {

//从json文件中读取发送邮件服务器配置信息
cfgjson := getConf()

var cfg cfgmail
dec := json.NewDecoder(strings.NewReader(cfgjson))
for {

if err := dec.Decode(&cfg); err == io.EOF {
break
} else if err != nil {
log.Fatal(err)
}

//fmt.Printf("%s\n%s\n%s\n", cfg.Username, cfg.Password, cfg.Smtphost)

}

username := cfg.Username
password := cfg.Password
host := cfg.Smtphost

to := "10010@qq.com"

fmt.Printf("============")
fmt.Println(username)
subject := "能否收到邮件哟?Test send email by golang"

body := `
<html>
<body>
<h3>
"Test send email by golang,来个测试试一下"
</h3>
</body>
</html>
`

err := SendMail(username, password, host, to, subject, body, "html")
if err != nil {
fmt.Println("send mail error!")
fmt.Println(err)
} else {
fmt.Println("send mail success!")
}

}

func SendMail(user, password, host, to, subject, body, mailtype string) error {
hp := strings.Split(host, ":")
auth := smtp.PlainAuth("", user, password, hp[0])
var content_type string
if mailtype == "html" {
content_type = "Content-Type: text/" + mailtype + "; charset=UTF-8"
} else {
content_type = "Content-Type: text/plain" + "; charset=UTF-8"
}

msg := []byte("To: " + to + "\r\nFrom: " + user + "<" + user + ">\r\nSubject: " + subject + "\r\n" + content_type + "\r\n\r\n" + body)
send_to := strings.Split(to, ";")
err := smtp.SendMail(host, auth, user, send_to, msg)
return err
}

func getConf() string {
filename := "conf.json"
file, err := os.Open(filename)

defer file.Close()
if err != nil {
fmt.Println("read conf file error")
log.Fatal(err)
}

buf := make([]byte, 512)
var str1 string
for {
n, _ := file.Read(buf)
if 0 == n {
break
}
//os.Stdout.Write(buf[:n])

str := string(buf[:n])

str1 = str1 + str
}
return str1
}

[/java]

然后执行

[java]go run sendmail.go[/java]

即可.

对于一些文件的操作,可参考:https://github.com/astaxie/build-web-application-with-golang/blob/master/ebook/07.0.md

nginx日志切割

nginx的日志文件没有rotate功能。如果你不处理,日志文件将变得越来越大,还好我们可以写一个nginx日志切割脚本来自动切割日志文件。

第一步就是重命名日志文件,不用担心重命名后nginx找不到日志文件而丢失日志。在你未重新打开原名字的日志文件前,nginx还是会向你重命名的文件写日志,linux是靠文件描述符而不是文件名定位文件。 Continue reading

mysql中innodb表的count优化

作/译者:叶金荣(imysql#imysql.com>),来源:http://imysql.com,欢迎转载。

起因:在innodb表上做count(*)统计实在是太慢了,因此想办法看能不能再快点。
现象:先来看几个测试案例,如下
一、 sbtest 表上的测试

show create table sbtest\G
*************************** 1. row ***************************
Table: sbtest
Create Table: CREATE TABLE `sbtest` (
`aid` bigint(20) unsigned NOT NULL auto_increment,
`id` int(10) unsigned NOT NULL default '0',
`k` int(10) unsigned NOT NULL default '0',
`c` char(120) NOT NULL default '',
`pad` char(60) NOT NULL default '',
PRIMARY KEY  (`aid`),
KEY `k` (`k`),
KEY `id` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1000001 DEFAULT CHARSET=latin1

show index from sbtest;
+--------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| Table  | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+--------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| sbtest |          0 | PRIMARY  |            1 | aid         | A         |     1000099 |     NULL | NULL   |      | BTREE      |         |
| sbtest |          1 | k        |            1 | k           | A         |          18 |     NULL | NULL   |      | BTREE      |         |
| sbtest |          1 | id       |            1 | id          | A         |     1000099 |     NULL | NULL   |      | BTREE      |         |
+--------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+

填充了 100万条 记录。

show index from 表名介绍:http://blog.haohtml.com/archives/1889 Continue reading

通过将session分布到多个目录里来提高网站访问速度

如果一个网站的session量特别大的话,且所有的session文件都在同一个子目录下的话,那么可能会由此带来很严重的负载问题,甚至导致网站无法使用。本文就是对这个方案做一下详细的解说。
首先,修改 php.ini的 session.save_path 选项,大致如下:

session.save_path = "3;/tmp/php_sess"

意为把session存放在 "/tmp/php_sess" 目录下,并且分成 3 级子目录,每级子目录又分多个子目录。

Continue reading

Linux下安装php开发框架yaf

https://github.com/laruence/php-yaf

yaf框架中文手册:http://yaf.laruence.com/manual/index.html

yaf手册:http://www.php.net/manual/en/book.yaf.php

1.下载并安装yaf扩展 http://pecl.php.net/package/yaf

#wget http://pecl.php.net/get/yaf-2.2.9.tgz
#tar zxvf yaf-2.2.9.tgz
#cd yaf-2.2.9

[root@bogon yaf-2.2.9]# whereis phpize
phpize: /usr/bin/phpize /usr/share/man/man1/phpize.1.gz
/usr/bin/phpize

[root@bogon yaf-2.2.9]# /usr/bin/phpize
Configuring for:
PHP Api Version: 20090626
Zend Module Api No: 20090626
Zend Extension Api No: 220090626
#whereis php-config
php-config: /usr/bin/php-config /usr/share/man/man1/php-config.1.gz

#./configure --with-php-config=/usr/bin/php-config
#make && make install

2.添加扩展配置到php.ini

在/etc/php.ini文件里添加一行

extension=yaf.so

重启webserver 即可.

===========================
如果在./configure的时候遇到以下错误:

configure: error: in `/root/yaf-2.2.9′:configure: error: no acceptable C compiler found in $PATHSee `config.log’ for more details.

说明,没有安装gcc.用 yum -y install gcc 安装一下即可.