leadscloud

Google SEO|外贸营销推广

// 以名/值的形式储存cookie
// 同时采用encodeURIComponet()函数进行编码,来转义分号、逗号和空白符
// 如果daysToLive是一个数字,设置max-age属性为该数值表示cookie知道指定的天数
// 到了才会过期。如果daysToLive是0就表示删除cookie
function setCookie(name, value, daysToLive) {
var cookie = name + “=” + encodeURIComponent(value);
if (typeof daysToLive === “number”) {
cookie += “; max-age=” + (daysToLive6060*24);
}
document.cookie = cookie;
}

1
2
3
4
<form method="post"  id="form_1" action="javascript:;">
<input type="submit" value="add" name="sub"/>
<input type="submit" value="envoi" name="sub"/>
</form>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$(function() {
$('input[name=sub]').click(function(){
var _data= $('#form_1').serialize() + '&amp;sub=' + $(this).val();
$.ajax({
type: 'POST',
url: "php.php?",
data:_data,
success: function(html){
$('div#1').html(html);
}
});
return false;
});
});

参考信息: http://stackoverflow.com/questions/3275640/jquery-submit-ajax-form-with-2-submit-buttons

在使用Ajax与后台php页面进行交互的时候都碰到过中文乱码的问题。JSON作为一种轻量级的数据交换格式,备受亲睐,但是用PHP作为后台交互,容易出现中文乱码的问题。JSON和js一样,对于客户端的字符都是以UTF8的形式进行处理的,也就是说,使用JSON作为提交和接收的数据格式时字符都采用UTF8编码处理,当我们的页面编码和数据库编码不是采用UTF8的时候,就极容易出现中文乱码的问题。解决办法自然是在用js或者PHP处理JSON数据的时候都采用UTF8的形式。

json_encode只支持UTF8编码的字符,否则,中文乱码或者空值就出现了。

Step1

保证在使用JSON处理的时候字符是以UTF8编码的。具体我们可以把数据库编码和页面编码都改为UTF8。当然喜欢用gbk编码的话,可以在进行JSON处理前,把字符转为UTF8形式。在PHP中有如下方法:

1
2
3
4
5
6
7
<?php
$data="JSON中文";
$newData=iconv("GB2312","UTF-8//IGNORE",$data);
echo $newData;
//ignore的意思是忽略转换时的错误,如果没有ignore参数,所有该字符后面的字符都不会被保存。
//或是("GB2312","UTF-8",$data);
?>

Step2

后台PHP页面(页面编码为UTF-8或者已经把字符转为UTF-8)使用json_encode将PHP中的array数组转为JSON字符串。例如:

1
2
3
4
<?php
$testJSON=array('name'=>'中文字符串','value'=>'test');
echo json_encode($testJSON);
?>

查看输出结果为:

1
{“name":"\u4e2d\u6587\u5b57\u7b26\u4e32,"value":"test"}

可见即使用UTF8编码的字符,使用json_encode也出现了中文乱码。解决办法是在使用json_encode之前把字符用函数urlencode()处理一下,然后再json_encode,输出结果的时候在用函数urldecode()转回来。具体如下:

1
2
3
4
5
6
7
8
<?php
$testJSON=array('name'=>'中文字符串','value'=>'test');
//echo json_encode($testJSON);
foreach ( $testJSON as $key => $value ) {
$testJSON[$key] = urlencode ( $value );
}
echo urldecode ( json_encode ( $testJSON ) );
?>

查看输出结果为:

1
{“name":"中文字符串","value":"test"}

到此,成功地输出了中文字符。随意使用json_encode吧。这样子在PHP后台输出的JSON字符串在前台javascript中Ajax接收后eval出来也不会出现中文乱码,因为js在处理JSON格式数据是以UTF8的形式进行的,与PHP类似,故接收PHP页面的JSON字符串不会出现问题。

WordPress仅仅用了10 个表:wp_comments, wp_links, wp_options, wp_postmeta, wp_posts, wp_term_relationships, wp_term_taxonomy, wp_terms, wp_usermeta, wp_users

按照功能大致分为五类
用户信息: wp_users和wp_usermeta
链接信息: wp_links
文章及评论信息: wp_posts、wp_postmeta、wp_comments
对分类,链接分类,标签管理: wp_term,wp_term_relationships,wp_term_taxonomy
全局设置信息: wp_options

wp_posts
博客发表”文章”存放的地方就是这个wp_posts表了。这个表里存放的除了普通的文章之外,还有附件和页面(page)的一些信息。post_type 字段是用来区分文章类型的。如果post_type是’post’,那么就是文章,如果是’page’,那么就是页面,如果是’attachment’, 那么就是附件了.

wp_postmeta
这个表很简单,只有 meta_id, post_id, meta_key, meta_value 这四个字段。post_id 是相关 “文章” 的id。meta_value 是longtext类型的,这里仅是用来存储值。在撰写文章的时候,在编辑框下面有一个 Custom Fields 的选项,我们可以在这里添加post的meta信息。

wp_comments
比较重要的两个字段是 comment_post_ID 和 comment_approved,前一个用来指示这条评论隶属于哪一篇文章,后一个用来记录审核状况。还有一个比较有意思的是这个 commnet_agent 字段,可以利用这个字段来统计一下用户浏览器类型。

wp_users
用户帐号表。存储用户名、密码还有一些用户的基本信息。

wp_usermeta
类似上面的 wp_postmeta,存储一些其他的用户信息。

wp_options
用来记录Wordpress的一些设置和选项。里面有一个blog_id字段,这个应该是用在MU版里面来标示不同的 Blog 的。autoload这个字段用来控制是否选项总是被WordPress或者插件导入并缓存来使用,或者是否只是在要求的情况下才被导入。

wp_links
用来存储 Blogroll 里面的链接。

wp_terms
它保存(term)的基本信息。name 就是 term 的名字,slug 是用于使得 URL 友好化。term_group 是用于把相似的 terms 集合在一起。term_id 是term的唯一ID。

wp_term_taxonomy
分类信息,是对wp_terms中的信息的关系信息补充,有所属类型(category,link_category,tag),详细描述所拥有文章(链接)数量。

wp_term_relationships
把 posts和links这些对象和term_taxonomy表中的term_taxonomy_id联系起来的关系表,object_id是与不同的对象关联,例如wp_posts中的ID(wp_links中的link_id)等,term_taxonomy_id就是关联 wp_term_taxonomy中的term_taxonomy_id。

WordPress使用MySQL数据库。作为一个开发者,我们有必要掌握WordPress数据库的基本构造,并在自己的插件或主题中使用他们。

截至WordPress3.0,WordPress一共有以下11个表。这里加上了默认的表前缀 wp_ 。

wp_commentmeta:存储评论的元数据
wp_comments:存储评论
wp_links:存储友情链接(Blogroll)
wp_options:存储WordPress系统选项和插件、主题配置
wp_postmeta:存储文章(包括页面、上传文件、修订)的元数据
wp_posts:存储文章(包括页面、上传文件、修订)
wp_terms:存储每个目录、标签
wp_term_relationships:存储每个文章、链接和对应分类的关系
wp_term_taxonomy:存储每个目录、标签所对应的分类
wp_usermeta:存储用户的元数据
wp_users:存储用户

在WordPress的数据库结构中,存储系统选项和插件配置的wp_options表是比较独立的结构,在后文中会提到,它采用了key-value模式存储,这样做的好处是易于拓展,各个插件都可以轻松地在这里存储自己的配置。

post,comment,user 则是三个基本表加上拓展表的组合。以wp_users为例,wp_users已经存储了每个用户会用到的基本信息,比如 login_name、display_name、 password、email等常用信息,但如果我们还要存储一些不常用的数据,最好的做法不是去在表后加上一列,去破坏默认的表结构,而是将数据存在 wp_usermeta中。wp_usermeta这个拓展表和wp_options表有类似的结构,我们可以在这里存储每个用户的QQ号码、手机号码、登录WordPress后台的主题选项等等。

比较难以理解的是term,即wp_terms、wp_term_relationships、wp_term_taxonomy。在WordPress的系统里,我们常见的分类有文章的分类、链接的分类,实际上还有TAG,它也是一种特殊的分类方式,我们甚至还可以创建自己的分类方法。WordPress 将所有的分类及分类方法、对应结构都记录在这三个表中。wp_terms记录了每个分类的名字以及基本信息,如本站分为“WordPress开发”、 “WPCEO插件”等,这里的分类指广义上的分类,所以每个TAG也是一个“分类”。wp_term_taxonomy记录了每个分类所归属的分类方法,如“WordPress开发”、“WPCEO插件”是文章分类(category),放置友情链接的“我的朋友”、“我的同事”分类属于友情链接分类(link_category)。wp_term_relationships记录了每个文章(或链接)所对应的分类方法。

庆幸的是,关于term的使用,WordPress中相关函数的使用方法还是比较清晰明了,我们就没必要纠结于它的构造了。

 

 

在上文中我们已经介绍了WordPress数据库中各个表的作用,本文将继续介绍每个表中每个列的作用。WordPress官方文档已经有比较详细的表格,本文仅对常用数据进行介绍。

wp_commentmeta
meta_id:自增唯一ID
comment_id:对应评论ID
meta_key:键名
meta_value:键值
wp_comments
comment_ID:自增唯一ID
comment_post_ID:对应文章ID
comment_author:评论者
comment_author_email:评论者邮箱
comment_author_url:评论者网址
comment_author_IP:评论者IP
comment_date:评论时间
comment_date_gmt:评论时间(GMT+0时间)
comment_content:评论正文
comment_karma:未知
comment_approved:评论是否被批准
comment_agent:评论者的USER AGENT
comment_type:评论类型(pingback/普通)
comment_parent:父评论ID
user_id:评论者用户ID(不一定存在)

wp_links
link_id:自增唯一ID
link_url:链接URL
link_name:链接标题
link_image:链接图片
link_target:链接打开方式
link_description:链接描述
link_visible:是否可见(Y/N)
link_owner:添加者用户ID
link_rating:评分等级
link_updated:未知
link_rel:XFN关系
link_notes:XFN注释
link_rss:链接RSS地址

 

wp_options
option_id:自增唯一ID
blog_id:博客ID,用于多用户博客,默认0
option_name:键名
option_value:键值
autoload:在WordPress载入时自动载入(yes/no)

 

wp_postmeta
meta_id:自增唯一ID
post_id:对应文章ID
meta_key:键名
meta_value:键值

 

wp_posts
ID:自增唯一ID
post_author:对应作者ID
post_date:发布时间
post_date_gmt:发布时间(GMT+0时间)
post_content:正文
post_title:标题
post_excerpt:摘录
post_status:文章状态(publish/auto-draft/inherit等)
comment_status:评论状态(open/closed)
ping_status:PING状态(open/closed)
post_password:文章密码
post_name:文章缩略名
to_ping:未知
pinged:已经PING过的链接
post_modified:修改时间
post_modified_gmt:修改时间(GMT+0时间)
post_content_filtered:未知
post_parent:父文章,主要用于PAGE
guid:未知
menu_order:排序ID
post_type:文章类型(post/page等)
post_mime_type:MIME类型
comment_count:评论总数

 

wp_terms
term_id:分类ID
name:分类名
slug:缩略名
term_group:未知
wp_term_relationships
object_id:对应文章ID/链接ID
term_taxonomy_id:对应分类方法ID
term_order:排序
wp_term_taxonomy
term_taxonomy_id:分类方法ID
term_id:taxonomy:分类方法(category/post_tag)
description:未知
parent:所属父分类方法ID
count:文章数统计

 

wp_usermeta
umeta_id:自增唯一ID
user_id:对应用户ID
meta_key:键名
meta_value:键值

 

wp_users
ID:自增唯一ID
user_login:登录名
user_pass:密码
user_nicename:昵称
user_email:Email
user_url:网址
user_registered:注册时间
user_activation_key:激活码
user_status:用户状态
display_name:显示名称

WordPress数据库中的表、字段、类型及说明

wordpress中各个表的字段,折腾WordPress必备良品~

**wp_categories: **用于保存分类相关信息的表。包括了5个字段,分别是:

  • cat_ID – 每个分类唯一的ID号,为一个bigint(20)值,且带有附加属性auto_increment。

  • cat_name – 某个分类的名称,为一个varchar(55)值。

  • category_nicename – 指定给分类的一个便于记住的名字,也就是所谓的slug,这是一个varchar(200)值。

  • category_description – 某个分类的详细说明,longtext型值。

  • category_parent – 分类的上级分类,为一个int(4)值,对应是的当前表中的cat_ID,即wp_categories.cat_ID。无上级分类时,这个值为0。
    **wp_comments: **用于保存评论信息的表。包括了15个字段,分别为:

  • comment_ID – 每个评论的唯一ID号,是一个bigint(20)值。带有附加属性auto_increment。

  • comment_post_ID – 每个评论对应的文章的ID号,int(11)值,等同于wp_posts.ID。

  • comment_author – 每个评论的评论者名称,tinytext值。

  • comment_author_email – 每个评论的评论者电邮地址,varchar(100)值。

  • comment_author_url – 每个评论的评论者网址,varchar(200)值。

  • comment_author_IP – 每个评论的评论者的IP地址,varchar(100)值。

  • comment_date – 每个评论发表的时间,datetime值(是加上时区偏移量后的值)。

  • comment_date_gmt – 每个评论发表的时间,datetime值(是标准的格林尼治时间)。

  • comment_content – 每个评论的具体内容,text值。

  • comment_karma – 不详,int(11)值,默认为0。

  • comment_approved – 每个评论的当前状态,为一个枚举值enum(’0′,’1′,’spam’),0为等待审核,1为允许发布,spam为垃圾评论。默认值为1。

  • comment_agent – 每个评论的评论者的客户端信息,varchar(255)值,主要包括其浏览器和操作系统的类型、版本等资料。

  • comment_type – 不详,varchar(20)值。

  • comment_parent – 某一评论的上级评论,int(11)值,对应wp_comment.ID,默认为0,即无上级评论。

  • user_id – 某一评论对应的用户ID,只有当用户注册后才会生成,int(11)值,对应wp_users.ID。未注册的用户,即外部评论者,这个ID的值为0。
    **wp_linkcategories: **用于保存在WP后台中添加的链接的相关信息的表。包括13个字段:

  • cat_id – 每个链接分类的唯一ID,bigint(20)值,为一个自增量auto_increment。

  • cat_name – 每个链接分类的名字,tinytext值。

  • auto_toggle -这个字段所包含的是一个比较特别的属性。如果为Y,则当该分类中加入了新链接时,其它的链接会变为不可见。它是一个枚举型的值enum(’Y’,’N’),默认为N。

  • show_images – 该字段也是枚举值enum(’Y’,’N’),默认为Y。用户指定是否允许在该链接分类显示图片链接。

  • show_description – 该字段指定相应的链接分类下的链接,是否再专门[换行]显示它们的说明,这是一个枚举型值enum(’Y’,’N’),默认为N,即不显示说明(但会通过title属性中显示说明)。

  • show_rating – 显示该分类下链接的等级。它也是一个枚举值enum(’Y’,’N’),默认为Y。此时,你可以用链接等级的方式来对该链接分类下的链接进行排序。

  • show_updated – 指定该链接分类有更新是,是否进行显示,枚举值enum(’Y’,’N’),默认为Y。

  • sort_order – 指定该链接分类中链接的排序依据,varchar(64)值。一般用链接的名字(name,即wp_links.link_name)或ID(id,即wp_links.link_id)。

  • sort_desc – 指定链接分类的排序方式,枚举值enum(’Y’,’N’),默认为N,即用降序。

  • text_before_link – 该链接分类下每个链接的前置html文本,varchar(128)值,默认是’列表开始标签’。

  • text_after_link – 该链接分类下每个链接的中,链接与说明文字(wp_links.link_description)之间的html文本,varchar(128)值,默认是’换行标签’。

  • text_after_all – 该链接分类下每个链接的后置html文本,varchar(128)值,默认是’列表结束标签’。

  • list_limit – 用于规定某一链接分类中显示的(可设定的?)链接的个数,int(11)值,默认为-1,即对链接分类下链接的个数无限制。
    **wp_links :**用于保存用户输入到Wordpress中的链接(通过Link Manager)的表。共14个字段:

  • link_id – 每个链接的唯一ID号,bigint(20)值,附加属性为auto_increment。

  • link_url – 每个链接的URL地址,varchar(255)值,形式为http://开头的地址。

  • link_name – 单个链接的名字,varchar(255)值。

  • link_image – 链接可以被定义为使用图片链接,这个字段用于保存该图片的地址,为varchar(255)值。

  • link_target – 链接打开的方式,有三种,_blank为以新窗口打开,_top为就在本窗口中打开并在最上一级,none为不选择,会在本窗口中打开。这个字段是varchar(25)值。

  • link_category – 某个链接对应的链接分类,为int(11)值。相当于wp_linkcategories.cat_id。

  • link_description – 链接的说明文字。用户可以选择显示在链接下方还是显示在title属性中。varchar(255)值。

  • link_visible – 该链接是否可以,枚举enum(’Y’,’N’)值,默认为Y,即可见。

  • link_owner – 某个链接的创建人,为一int(11)值,默认是1。(应该对应的就是wp_users.ID)

  • link_rating – 链接的等级,int(11)值。默认为0。

  • link_updated – 链接被定义、修改的时间,datetime值。

  • link_rel – 链接与定义者的关系,由XFN Creator设置,varchar(255)值。

  • link_notes – 链接的详细说明,mediumtext值。

  • link_rss – 该链接的RSS地址,varchar(255)值。
    **wp_options: **用于保存Wordpress相关设置、参数的表,共11个字段。最重要是的option_value字段,里面包括了大量的重要信息。

  • option_id – 选项的ID,bigint(20)值,附加auto_increment属性。

  • blog_id – 不详。或许用在单在用户的WP版本上并不重要吧,或许是针对不同用户的Blog来设置的一个值。int(11)值,默认为0,即当前blog。

  • option_name – 选项名称,varchar(64)值。

  • option_can_override – 该选项是否可被重写、更新,枚举enum(’Y’,’N’)值,默认为Y,即可被重写、更新。

  • option_type – 选项的类型,作用不详,int(11)值,默认为1。

  • option_value – 选项的值,longtext值,这个字段的内容比较重要。Wordpress初始化时就会设定好约70个默认的值,这里暂不介绍。

  • option_width – 选项的宽(?),作用不详。int(11)值,默认为20。

  • option_height – 选项的高(?),作用不详。int(11)值,默认为8。

  • option_description – 针对某个选项的说明,tinytext值。

  • option_admin_level – 设定某个选项可被操纵的用户等级(详情见我的相关文章),int(11)值,默认为1。

  • autoload – 选项是否每次都被自动加载,枚举enum(’yes’,’no’)值,默认为yes。
    **wp_post2cat: **用于保存文章(posts)与分类(categories)之间的关系的表,只有三个字段:

  • rel_id – 关联ID,bigint(20)值,是个有auto_increment属性的自增量。

  • post_id – 文章的ID,bigint(20)值,相当于wp_posts.ID。

  • category_id – 分类的ID,也是bigint(20)值,相当于wp_categories.ID。
    文章与分类的关系的形成是这样的:rel_id是一个不断增加的自增量,它用于识别每不同的post。post_id可以重复(当它对应多个分类时),因为它可被rel_id识别,所以不会出现混乱。每个post_id可对应多个category_id时,一个rel_id + post_id组合,可以识别某一个分类,因此每个文章的分类可以是不同的。通过这张表,可以非常快速、高效地找出某篇文章(post)对应了哪些分类 (category),反之亦然。

**wp_postmeta: **用于保存文章的元信息(meta)的表,四个字段:

  • meta_id – 元信息ID,bigint(20)值,附加属性为auto_increment。
  • post_id – 文章ID,bigint(20)值,相当于wp_posts.ID。
  • meta_key – 元信息的关键字,varchar(255)值。
  • meta_value – 元信息的值,text值。
    这些内容主要是在文章及页面编辑页(Write Post, Write Page)的”Add a new custom field to this post(page):”下进行设定的。meta_key就对应名为”key”的下拉列表中的项,而值由用户自己填上(某些时候,wp也会自动加入,如文章中有的音频媒体)。

**wp_posts: **用于保存你所有的文章(posts)的相关信息的表,非常的重要。一般来讲,它存储的数据是最多的。一共包括了21个字段。
ID – 每篇文章的唯一ID,bigint(20)值,附加属性auto_increment。

  • post_author – 每篇文章的作者的编号,int(4)值,应该对应的是wp_users.ID。

  • post_date – 每篇文章发表的时间,datetime值。它是GMT时间加上时区偏移量的结果。

  • post_date_gmt – 每篇文章发表时的GMT(格林威治)时间,datetime值。

  • post_content – 每篇文章的具体内容,longtext值。你在后台文章编辑页面中写入的所有内容都放在这里。

  • post_title – 文章的标题,text值。

  • post_category – 文章所属分类,int(4)值。

  • post_excerpt – 文章摘要,text值。

  • post_status – 文章当前的状态,枚举enum(’publish’,’draft’,’private’,’static’,’object’)值,publish为已发表,draft为草稿,private为私人内容(不会被公开) ,static(不详),object(不详)。默认为publish。

  • comment_status – 评论设置的状态,也是枚举enum(’open’,’closed’,’registered_only’)值,open为允许评论,closed为不允许评论,registered_only为只有注册用户方可评论。默认为open,即人人都可以评论。

  • ping_status – ping状态,枚举enum(’open’,’closed’)值,open指打开pingback功能,closed为关闭。默认值是open。

  • post_password – 文章密码,varchar(20)值。文章编辑才可为文章设定一个密码,凭这个密码才能对文章进行重新强加或修改。

  • post_name – 文章名,varchar(200)值。这通常是用在生成permalink时,标识某篇文章的一段文本或数字,也即post slug。

  • to_ping – 强制该文章去ping某个URI。text值。

  • pinged – 该文章被pingback的历史记录,text值,为一个个的URI。

  • post_modified – 文章最后修改的时间,datetime值,它是GMT时间加上时区偏移量的结果。

  • post_modified_gmt – 文章最后修改的GMT时间,datetime值。

  • post_content_filtered – 不详,text值。

  • post_parent – 文章的上级文章的ID,int(11)值,对应的是wp_posts.ID。默认为0,即没有上级文章。

  • guid – 这是每篇文章的一个地址,varchar(255)值。默认是这样的形式: http://your.blog.site/?p=1,如果你形成permalink功能,则通常会是: 你的Wordpress站点地址+文章名。

  • menu_order – 不详,int(11)值,默认为0。

  • post_type – 文章类型,具体不详,varchar(100)值。默认为0。

  • post_mime_type – 不详。varchar(100)值。

  • comment_count – 评论计数,具体用途不详,bigint(20)值。
    **wp_usermeta : **用于保存用户元信息(meta)的表,共4个字段:

  • umeta_id – 元信息ID,bigint(20)值,附加属性auto_increment。

  • user_id – 元信息对应的用户ID,bigint(20)值,相当于wp_users.ID。

  • meta_key – 元信息关键字,varchar(255)值。

  • meta_value – 元信息的详细值,longtext值。
    **wp_users:**用于保存Wordpress使用者的相关信息的表。WP官方对2.0.2版本中该表的情况的说明有些矛盾(称有22个字段,但详细的列表中只有11个),所以这里只能列出11个字段进行说明:

  • ID – 用户唯一ID,bigint(20)值,带附加属性auto_increment。

  • user_login – 用户的注册名称,varchar(60)值。

  • user_pass – 用户密码,varchar(64)值,这是经过加密的结果。好象用的是不可逆的MD5算法。

  • user_nicename – 用户昵称,varchar(50)值。

  • user_email – 用户电邮地址,varchar(100)值。

  • user_url – 用户网址,varchar(100)值。

  • user_registered – 用户注册时间,datetime值。

  • user_level – 用于等级,int(2)值,可以是0-10之间的数字,不同等级有不同的对WP的操作权限。

  • user_activation_key – 用户激活码,不详。varchar(60)值。

  • user_status – 用户状态,int(11)值,默认为0。

  • display_name – 来前台显示出来的用户名字,varchar(250)值。

[root@server2 ~]# netstat -ntu

Active Internet connections (w/o servers)

Proto Recv-Q Send-Q Local Address Foreign Address State

tcp 0 0 127.0.0.1:8652 127.0.0.1:40193 TIME_WAIT

tcp 0 0 127.0.0.1:8652 127.0.0.1:40192 TIME_WAIT

tcp 0 0 127.0.0.1:8652 127.0.0.1:40196 TIME_WAIT

tcp 0 0 127.0.0.1:8652 127.0.0.1:40199 TIME_WAIT

tcp 0 0 127.0.0.1:8652 127.0.0.1:40201 TIME_WAIT

tcp 0 0 127.0.0.1:8652 127.0.0.1:40204 TIME_WAIT

tcp 0 0 127.0.0.1:8652 127.0.0.1:40207 TIME_WAIT

tcp 0 0 127.0.0.1:8652 127.0.0.1:40210 TIME_WAIT

tcp 0 0 192.168.32.62:41682 192.168.47.207:5432 TIME_WAIT

tcp 0 0 192.168.32.62:41685 192.168.47.207:5432 TIME_WAIT

netstat -ntu | tail -n +3 | awk '{ print $5}' | cut -d : -f 1 | sort | uniq -c| sort -n -r | head -n 5 tail -n +3 :去掉上面用红色标明的两行。 awk '{ print $5}':取数据的低5域(第5列),上面蓝色标明。 cut -d : -f 1 :取蓝色部分前面的IP部分。 sort:对IP部分进行排序。 uniq -c:打印每一重复行出现的次数。(并去掉重复行) sort -n -r:按照重复行出现的次序倒序排列。 head -n 5:取排在前5位的IP 。

还是习惯着写年月的时候写上2012,然后发现错了,又修改过来。2012末日没有来,最后的几天是在上海度过。心情也不算好吧,至少也不坏,工作上的不顺心,我想在旅途中会忘却的,在一个美好的希望被浇灭的时候我想到上海转转,看看朋友,看看这个一年多未见的城市。它依旧是灯光旖旎,顿时显得郑州是个小城了。一个城市的繁华,路上的指向牌就可以代表。

两天的时间,阳光明媚,我很喜欢的天气,元旦还收到了最期待的祝福。那是不错的两天,中间也看到了一些不愉快的事情,但也让我可以好好想下这一年的生活。一直想写下一些东西,记住最近的想法,主要是不愉快的时候会有记住的想法,如果不是搬公司,不是招聘,自己不会有“时间” 去思考自己的工作与生活,我的生活一直是波澜不惊的。

在朋友那儿,遇到了类似夫妻之间的吵架,很严重的吵架,这让我有很多感慨,有时发现自己也就是那种容易生气的人。这件事给我的体会就是,无论你多么的生气,在别人面前耍性子是没用的,即使你最亲的人也不是什么时候都行,在别人眼中看着你生气,他们的想法和自己想表达的是完全不同的意思,这也是为什么,要让人不要在别人面前显露你的态度。也许仅仅是留下一个不好的印象,对于那些了解你的人会原谅你,但却不会可能一直原谅。 婚姻应该是两个人的同时妥协才能长久的,无论哪一方的坚持,换来都是越来越深的矛盾。

然而,当你冷静时,这些理性可以很好的表达,但感性用事时,你怎么会记得这些文字,的确会让人很累的,所以总是发生这样的事,某一篇文章,在若干事件之后,又会删掉它,是当时不理性太冲动,还是后来我的我们太过冷静,考虑过多了。

在工作上面,由于公司招聘和搬家的事情,出了很多事,才可以让自己对这些细细想想。这一年,很多事情做的并不好吧,这儿的生活也不是很好,现在可能更不好了。 对于未来的一年,我定了一些目标,如果我完成的话,无论怎么样,我都感觉这一年会是成功的。这些目标是关于学习与成长的。我要靠自己的学习来增加价值,而不是靠在公司的时间长短来积累。—“我们必须了解自己的渺小。如果我们不学习,科技发展的速度会让我们五年后被清空。所以,我们必须用初学者谦虚的自觉,饥饿者渴望的求知态度,来拥抱未来的知识。”

对于工作,我的期望是公平与争取,我听到一句话,大意就是说你只要等一个机会,一旦成熟了,就只等着收获了,所有的事情别人就会做好,自己只等着拿钱了。我对此感到很不爽,似是贬低我们这些做技术的,我们并不是不懂得其它的事情,只是我们觉得做其它事未必有这么好罢了,如果你让我做某一件事,我尽了力的话,未必就做不好其它方面的事。刚进公司的时候,就因为学历,自己不在别人之上,我当时觉得,他的学历比我高,可以在我之上得到器重,但这得有一个度,不是说有个学历高的,就什么他都牛逼了,这些年,至少证明我这个想法并不是多错。以前听到一个故事,一个农村青年,一个城市青年,同时进入一个名牌大学,一个只知道学习,对流行,科技,几乎不懂,一个在来之前就对这社会所有的新奇都了解,但4年之后,这两个根本没任何区别,因为,当初一个只不过比另一个晚4年而已,4年之后,他们所知道的是一样多的。

另外一点,我的体会就是,公司之中,如果能争取到的利益,我们就应该去争取,对下属的一些要求能满足的就满足,这对公司并没有什么损失,不能什么事情都先自我审查下,先给否定了,况且很少有人会提取不现实的要求。也许是最开始我在公司的经历比较特殊,对这点特别敏感。

一个人,在公司内部,受制于很多,我们的一些利益如果突然被剥夺了,当然公司总是正确的。对于这样的事情,我一直在想,如果自己提出意见,也不会得到解决,只是落得这个人给别人印象不满意。但如果不提,这事情就像什么也没有发生,便自己心时总会觉得不舒服。个人是渺小的,在这些事上,依着自己的本性做,会是一个有脾气的人。你想做哪个呢?

从最初上学到现在,学会控制自己的情绪,是自己最明白,也最想做,也是总是做不到的事。但现在的想法与过去会有很大的不同,不会像以前那样,但也不会完全变得一个没脾气的人。跟着你的感觉走,完全是行不通的!

2013年,告诉自己,你要去学习,多读书。希望明年,我对今天的很多问题有个答案。

你以为我穷。不漂亮,就没有感情吗?如果上帝赐给我美貌和财富,我也会让你难于离开我的!就象我现在难于离开你一样! ——《简爱》

这篇文章是我在部门会议上一次发言的总结。之所以会有这次会议,是因为我的一名员工向我提出了辞职,在思索了几天后,我整理了一下自己的思路,于是便有了这次的会议和现在的这篇文章。

收入是由什么决定的?

这位员工辞职的原因主要有两个:

公司的薪水无法达到他的预期,未来一年在公司的收入前景也不是很明确。

想要去做更底层的开发,方向是使用C/C++开发3D图形图像。而我们公司主要是.NET开发。

既然其中的一个原因是薪水无法符合预期,那么首先要搞清楚的就是收入是由什么决定的。

1.积累

首先要说的一点就是:积累。积累就是你在这家公司所创造的价值的积累。

你今天所领的薪水,并不是由你现在所创造的价值所决定的,而是包含了以前一段时期内其他同事所创造的价值。举个例子来说,公司目前排名前三的大客户:客户A、客户B、客户C。

客户A是2008年接下来的,现在每年为公司贡献600万。

客户B是2009年接下来的,现在每年为公司贡献500万。

客户C是2010年接下来的,现在每年为公司共享350万。

我的年薪是你的两倍还多。可我也承认,我现在所能创造的价值,和我的能力绝对不可能是你的两倍。可问题是:2008年、2009年、2010年这些年份我都在公司,上面的每一个大客户,都有我的贡献。而你2012年才新进公司,你并没有之前的积累。所以,新员工入职后,工资相较老员工会低一些是正常的。很多新员工总是认为自己的收入低了,吃亏了,实际上,很多情况下,新员工在加入公司的头一年,公司仅能维持平衡,即新员工创造的价值全当工资发给他了。直到第二年,有了上一年的积累之后,公司才有所盈余。而加入半年就离职的员工,对公司来说基本上是亏本的。这也就解释了为什么人员流动特别快的公司活不长,因为人力成本太高。

关于积累,我可以再举几个例子说明一下:

洪小莲,李嘉诚的秘书,几十年来一直追随李嘉诚,她从几千元的工薪族,做到身家上亿的工薪族,享受的是公司成长的回报。这种回报并非是她个人的学识和能力有了大幅的提高而得到的等价交换,很大程度上仅仅是因为她忠诚地待在这趟车上。

杨元庆,联想现在的CEO,研究生毕业后就一直追随柳传志,尽管一开始从事的是他并不很乐意的销售工作,但最终还是坚持了下来。上一次注意到他,是看到一则新闻,标题是“杨元庆自掏2000万奖励一线员工”。

上面只是正面的例子,也有反面的例子:

吴士宏,曾写了一本书叫做《逆风飞扬》,可谓是红极一时。1986年进入IBM,1998年离开IBM,进入微软,担任微软中国公司总经理,1999年进入TCL,2002年离开TCL。之后就离开了公众的视线。我特意去百度搜索“吴士宏现在在哪里”,没有任何的消息。我想如果她很成功的话,一定还属于“公众人物”,不至于连度娘都不知去向。

跳槽的话显然就要放弃先前的积累。比方说,当你跳槽到另一家公司以后,你曾经做过的系统、曾经服务过的客户仍然在为先前的公司创造着利润,可是跟你已经一毛钱关系都没有了(极少数公司有股票,另当别论)。所以跳槽之前要慎重考虑,跳得不好,有可能越跳越低。

既然新员工相对于老员工来说,收入低一些是正常的,那么老员工工资高也是合情合理的。但是有一些公司,我将其归为“无良公司”,它们会在老员工的收入高到一定程度的时候,将老员工砍掉,然后再招募低廉的新人来承担之前老员工的工作,以赚取更高的利润。我觉得这些都是小聪明,最后的结果就是,聪明能干一些的人,在看出公司的这些伎俩之后果断离职;能力一般的员工,也会把你这里当成培训基地,翅膀硬了就飞了,受损的最后还是公司,实在是得不偿失。还不如厚待老员工,也让新进的员工对未来有一个更好的预期。也有一些人向我抱怨说:“老员工待得久了,干劲都被磨光了,每天都是混日子,还不如新员工,不开他开谁?”。然后我反问他:“激励员工难道不正是你工作的一部分吗?”。这种情况的出现,更多时候,是管理者的责任,而非员工。

2.老板

这个“老板”是宽泛的老板,不一定是公司最大的老板。有的时候,公司比较大,你的职位又比较低,大老板连有没有你这个人都不知道,此时的老板就是你的顶头上司。很多时候,你的收入与他也有着莫大的关系。

对于我来说,我的原则是:在我的能力范围内,我会为我的员工争取更好的待遇。表面上看,这样做很蠢,花6000块就能雇到一个人,为什么要花8000块?我不是这样认为的,我期望能和我的员工形成这样一种互动:我尽我的能力为你争取好的待遇,你也尽你的努力做好工作。

我不能要求员工“你先把工作做好,我自然会给你好的待遇”。总是要有人先迈出一步,总是要有一方先信任另一方,所以在你什么还没有做的时候,我就先信任你,并且给你尽可能好的待遇,那么我该做的事情都做了,我问心无愧,剩下的,就看你的表现了。

可能有人会想,都这样了怎么还会有人提出辞职?实际上,提出辞职的是一个毕业刚一年的小伙子,1989年生,毕业1年多,我给他的待遇是试用期 9000,转正后9500。在给他这个待遇之前,我是进行过一些调研的,我打电话给我的一个表妹,她是西安电子科技大学的研究生(陕西省排名第三的学校,211院校),她和她的同学在今年毕业找工作的时候,多得是6000到8000的工资。所以从这方面来说,我并没有亏待你,而你要求12K的工资,我并不是不愿意给这么多,你的表现也说明了你是个很有潜力的人才。只是受经济环境的影响,今年公司的效益不及往年,要在一定程度上节省开支。其次,你让其他的老员工情何以堪?所以,综合起来,你的要求超出了我的能力范围之外,我无法开口向公司申请提高你的薪水。

3.门槛

除了积累和顶头上司两个决定因素以外,第三个决定因素就是你从事工作的门槛。为什么餐厅服务员的收入很低?为什么坐在前台收发快递的文员收入很低?因为这些工作的门槛很低,门槛低就意味着你不做有的是人能做,你不做有大批的“后备队伍”在等着做。由于庞大的后备队伍的竞争,你就无法提高自己的要价。而提升自己所从事工作的门槛,实际上就缩减了竞争者的规模。

程序开发也是一样。如果你想收入高,你就做一些别人做不了,又有市场的。

.NET在程序开发中就属于门槛比较低的一类。个中原因我想大家都懂的,就不在这里赘述了。做.NET不需要你科班出身,或许一点兴趣再加上一点时间,或许一个类似北大青鸟的培训,都可以让你开始从事.NET开发了。你可以不懂指针、不懂数据结构、不懂算法、不懂汇编、不懂很多东西,但照样可以做出一个.NET程序来。而这些人往往又是对薪资的要求没那么高的,这样无形中就拉低了.NET程序员的“身价”。.NET的易学易会,很大程度上是由于它的封装性比较好。底层的东西都屏蔽掉了,你只要知道学习一下命名空间,然后寻找相关的API去调用就好了。记得我曾经开发过一个基于C语言的手持设备程序,没有任何的类库支持,连排序、链表这样.NET中的基本功能,都要自己来实现,更别提内存管理和程序逻辑了,和.NET比起来,门槛就相对高一些了。

所以,如果想收入高一些,那么就去做更高难度的技术工作,这里随便想了几个例子:

百度、谷歌的搜索引擎算法。

微软、谷歌、苹果的操作系统。

网络游戏,例如《征途》的游戏引擎。

大型企业的ERP,比方说SAP。

软硬结合,比如单片机,电气自动化。

以及我这位即将离职的同事说的,3D图形图像。

所以,从这个角度来看,这位同事的辞职是明智的,他很年轻,有的是机会重新选择自己的道路,所以我也祝愿他能有更好的发展。而这些好赚的钱,就留给我们来做了:-)。

4.平台

接下来要说的一个决定因素是平台。很多程序员觉得30岁就瓶颈了,30岁写程序就到头了,实际上,这只是你的平台比较小罢了。就拿我自己的公司来说,平台就不大,只要是踏踏实实工作过5年的程序员,基本上就能够胜任公司90%的技术工作了,剩下的10%,请教一下其他同事,进行一下技术交流,也完全能够解决。这样就存在一个问题:随着你年龄的增长,你的生活压力越来越大,要求越来越高,可是公司只要5年经验的程序员就够用了。假设市场上5年经验的程序员的平均要求是10K,凭什么要给你15K?你的优势在哪里?如果你没有突破,就会有“30岁写程序就到头了”的感觉。

而如果平台大一些情况就会不一样,比方说,你去了IBM,可能5年的经验不过刚刚入门而已。IBM有一个工程院,其中有5位院士(IBM Fellow)获得过诺贝尔奖,很多人钻研技术都超过20年或者更久。如果你对技术感兴趣,并执着去钻研的话,你可以不断地去挑战和攀登。

当然,你可能没那么好的运气和实力进入IBM,那么其他一些中型的平台也是不错的,比方说阿里巴巴、金蝶、百度、腾讯等等。在这里,至少你有足够的理由和需要再去进行深入学习。因为在这些地方,5年的经验是远远不够的,还需要进一步地学习和努力。

如果你和我一样,不巧没有那么大的平台,此时的选择大概有这么几种:

1. 你可以凭借你在公司的积累(第一节讲过的),过比较安逸的日子。如果比较幸运,押对了宝,公司发展得比较好,收入一样会变得非常可观;如果比较不幸,公司经营的状况不好,那就要承担比较大的风险了。说得难听一点,公司倒闭了你去哪里?你过去的积累已经一文不值,而你的年龄已经35,水平却相当于只有5年经验。你的竞争力在哪里?

2. 你可以凭自己的努力将现在所在的平台做大,换言之,把自己的小公司做大。这当然是比较积极的做法,也是我一直努力的方向。现在你看到的大公司,不也是从小公司一步一步做起的吗?不过这里还有两个问题:1、有的时候,你的力量在公司中的占比没那么大,你再怎么努力推进的速度也还是有限;2、你缺乏慧眼,选中的公司本身就缺乏长大的资质。我们往往只看到成功了的公司,却忽视了更多在竞争中倒下的公司。

3. 主动选择更大的平台,也就是跳槽了。但是跳槽也是有风险的,尤其是过了30岁的程序员。你在这家公司的收入高,是因为有之前的积累,换一家就没有积累了,等于从新人开始,而大多数的公司,5年经验的程序员就够用了。如果跳得不好,收入还可能越跳越低,如果还有老婆、孩子、房贷,那将面临更大的压力。所以当你想要从一个低的平台向更高的平台跳跃的时候,平时就要做足功夫,认真积累自己的实力。对于我来说,我缺乏大型项目的管理经验,但是没关系,我努力学习考一个PMP没什么问题吧?我缺乏大型软件的架构经验,但是没关系,我把.NET的基础知识和各种设计模式掰开了揉碎了没什么问题吧?我缺乏大型团队的管理经验,但是没关系,每次遇到管理方面的问题我都认真思考仔细总结没什么问题吧?有些人总是抱怨没有机会,运气不好,我想机会总是有的,但只属于有准备的人。

5.行业

我想说的最后一点就是行业。有时候你觉得已经万事俱备了,可是你所处的这个行业本身就属于极低利润率的,你再怎么努力也很难有很高的收入。很多情况下,可能公司也想提高你的待遇,但是由于缺乏利润的支撑,公司也是有心无力。所以,在选择公司,尤其是小公司的时候,要重点考察一下公司所处的行业如何?是不是前景比较好、利润比较高的行业?如果是大公司的话,这方面的问题就会少一些,因为如果方向有问题,它就无法做成大公司。

行业是有周期性的,可能在一段时期内这个行业好,下一段时期这个行业就不行了。最典型的一个例子就是软盘,我现在的老板在成立这家公司之前是做销售的,他有一个客户,做索尼软盘的,这种软盘我想很多80后都见过。当时生意做得很大,可是当光盘出来以后,软盘的市场是会急剧萎缩的,可是这家公司的领导层居然没有看到,或者是看到了但不愿意转变,像鸵鸟一样在危机来临时把头埋在土里,继续做它的软盘。几年以后,这家公司就倒掉了。

选择行业也不是选择暴利行业就一定好,比方说房地产。资本都是逐利的,当一个行业属于暴利,同时所有人都知道它是暴利的时候,危机就来了。这个危机就是会有大量的社会资源、人力物力投入到这个行业中企图分一杯羹。而全局上又没有一个统一的把控,这个行业究竟需要多少公司才是合适的?最后的结果就是过剩。就好像股票在崩盘时,也许跌到3000点是比较合理也比较正常的位置,但是由于人们的恐慌,它就跌到1600点了。

感谢阅读,希望这篇文章能给你带来收获。

不是所有一年工作经验的毕业生都有这样的待遇,我主要是看能力,而不是年龄、学历等。特别说明一下,以免误导。

文章来源:张子阳的博客

sphinx error connection to 127.0.0.1:9312 failed (errno=0, msg=)

sphinx安装好之后,无论如何不能使用php api访问,查找了两天,重装了几次VPS,今天上午,终于找到答案了。在这儿连接里 http://stackoverflow.com/questions/13929949/sphinx-error-connection-to-127-0-0-19845-failed-errno-0-msg ,第一次看时没有注意,今天一句一句的看完了,才发现错误原因。看来学好英语是多么的重要,如果第一次看明白不会浪费这么多的时间了。浪费了一天的时间再研究它。以为没有答案了。

原因很简单,是因为lnmpa服务器下,禁用了一些函数,包括sphinx api必需的一个函数 fsockopen。 修改php.ini

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

找到disable_functions 把fsockopen从里面删除就行了。另外再说明下,lnmpa的php配置文件默认也关闭了scandir,这会导致wordpress主题文件显示为空。把它也删了就行了。

http://sphinxsearch.com/forum/view.html?id=5414

0%