易栈网-膘叔

浏览模式: 标准 | 列表 | 图文

Zend Studio 8.0 Beta 2: Virtualize Your PHP Development with VMware Workstation Integration

这是我收到的zendstudio发的邮件,我并非是为了宣传那个coupon code,而是被这个标题所吸引。。那就是现在的标题。
看内容吧(list one才是重点):

We've just launched the Beta 2 release of Zend Studio 8.0! This release adds exciting new capabilities to the industry-leading PHP IDE:

• Run and debug your PHP application in a virtual, production-like environment right from the Zend Studio interface with new VMware Workstation integration
• Develop your JavaScript code faster with Content Assist support for jQuery, Dojo, ExtJs, and Prototype
• Debug JavaScript front-end code and PHP back-end code in a single, unified debugging session, through a new set of integrated Ajax tools
• Develop projects over a remote server transparently with revamped remote system support
• Navigate through and edit your source code more quickly and smoothly thanks to enhancements throughout the interface

To celebrate this exciting new beta release, Zend is offering a 25% discount* on online purchases of Zend Studio 7.2 made before October 31st! Take this opportunity to start using the top-ranking PHP IDE (as scored by InfoWorld) at a great price, and your license will include a free upgrade to Zend Studio 8 once it's officially released.

Download Zend Studio 8.0 Beta

* Use coupon code CELEBRATE during checkout

Happy PHPing,
Zend - the PHP Company

失而复得的外套

失而复得的外套

超市购物。老婆带着小孩子去玩,我在和朋友谈点事情,忽然电话过来说是衣服不见了,可能是掉地上被人捡了吧?正好小孩要睡觉,于是乎,带到咖啡厅睡了一会,醒来后去超市问了一下营业员,还真的捡到了,经过一些手续拿到了衣服(过程有点复杂,回家用电脑再详细描述)
......
衣服是在超市丢掉的。然后睡醒后去找,事情就这样发生了。。。。
先到总服务台咨询一下,服务台告诉我没这么快建议我们去收银台旁边的服务台咨询一下。进了超市后,到了小朋友玩的时间最长的那个地方问了一下所在区域的服务员,好象是一个领班,帮忙问了一下,然后好几个服务员说是看到了衣服,并说了衣服存放的位置,然后发现衣服又不见了。再问其他的营业员,说,仿佛是给那些卖衣服的柜台去了(以为是别人在卖衣服的柜台拿了衣服,但临时没有购买随便扔在其他位置了)。
那位领班又去卖衣服的柜台帮忙问了一下,等了好久才回来,同时把衣服拿回来了,说是原来卖衣服的人也换班了,问了好几个人,再打电话给那位下班的同事才确认衣服的。
于是一件衣服失而复得。感谢超市的领班和服务员们。谢谢了。通过这件事也让我感觉到家乡的这种气氛变得好很多,放在几年前,80%就不见了。。

自 WAP 发表

happy birthday to myself

happy birthday to myself

a怎么着今天也算是自己的阴历生日,又正好在长假期间,约上三五好友过来吃饭喝酒。其实挺开心的。一转眼三十多了。人生三分之一已经过去了。

自 WAP 发表
经常打不开WEB?

经常打不开WEB?

最近单位的服务器好象经常出点事,苦于没有运维啊。灰常痛苦。
症状如下,先是网通的朋友说打不开,后来能打开,然后在公司里全部能够打开,河北人民告诉我,电信3G能打开,网通不行,南方的人民告诉我打得开。然而,唯一让人郁闷的是老板打不开。。。

不知道什么原因,然后因为服务器是做了LVS负载均衡,理论上应该没事,web服务器中php的进程也很正常。两台WEB服务器的nginx配置文件检查了一下,没发现啥问题,后来用tail /xxx/xxx/xxx.log看了一下,居然报配置文件出错,打开文件一看,居然有一行被注释的内容断行了,造成部分内容没有被注释,引起了错误,于是删除并重启nginx。

再后来就正常了,可是到晚上,又突然有人说出现502错误了,象这种情况,大多数是php-cgi进程要么超时,要么数量不够要么。。。苦于没有运维,我唯一能做的就是重启了一下WEB(一些配置文件都不在家,否则可以尝试只重启nginx和php-cgi)。

有人问过我为什么不升级到php5.3,说实话,我真的很想升啊。可惜用的代码中,有部分关键代码占用了5.3的关键字(好象以前在博客里说过,函数名居然叫namespace。于是,我傻眼了)

ThinkInLamp群中的hm说5.3自带的fastcgi好象不太稳定,反正我也没法升级,就随便看着喽(想着他们居然有时间有精力看nginx等的源码,心里就觉得非常佩服)

-------------

越往后越发现自己的能力欠缺,比如说开发都要了解linux的常规操作,但事实上,常规操作都会了,但一些更深层次的不深入也不行啊。不再深入一点,就无法真正从底层上进行性能调优等(纯PHP代码的调优,终究是有限度的)

国庆

国庆

啥也不多了。灌水。。。
为同样和我一样在加班的朋友们祝福。
注意,保重身体

PHP的小技巧

PHP的小技巧

好象,大多时候,我们对于字符串的比较都是采用了 strtolower或者strtoupper之后,再判断是否相等。只是这样就需要转换两次。大多时候,我们是针对字符集转换的时候才会这样,比如判断参数传进来是否utf-8,这5个字符的写法,可就多了,比如UTF-8,Utf-8,utf-8等,那我们怎么办呢?strtolower?strupper?不需要啦。。
strncasecmp($a,$b,$length)就可以了。。
如果返回是0则相等,那我们怎么判断呢?
strncasecmp($str,'utf-8',5) == 0那么,传入的参数就是utf8的,是否很方便呢?
只是这些函数我们平时不太用得到,我看到这个函数的用法却是在 yii framework,他在处理事件的时候,判断前两个字符是否为 on 的时候,就是这样判断的。我也因此学到了一招。

Mysql笔记

现在,懒得排版了。

遇到这个问题,从A表往B表导数据,初始SQL是这样的:

REPLACE INTO shopnc_member_extend (member_id,sell_product_count)
SELECT ug.uid,count(uid)
FROM uchome_goods ug
GROUP BY ug.uid

由于member_id不是主键,于是传说中的Replace删除数据的情况就出现了(replace在更新不是主键的时候,但某数据是唯一索引时,其实它是删除该数据,再insert,这时候如果你只是更新一两个字段,那么其余的字段就会变成默认值)。所以,该方法被我否决。但因为我只要更新一个字段,所以我想着用update,开始的时候,怎么也想不出,后来卫斯文和我说,用insert ignore into吧。于是把replace into 换成了 insert ignore into进行测试,结果是0 rows affected。

怎么办,问了一下锅巴哥哥,他说:用ON DUPLICATE KEY UPDATE吧,于是到mysql官方上找了一下资料,google搜索mysq on duplicate,第一条就是官方手册,我这里就不贴链接了,但我事实上没有看太懂。。这时候卫斯文也说用ON DUPLICATE KEY UPDATE。然后给了一个例子:

INSERT INTO music_top_filtration (`sid`, `type`, `count_num`)
SELECT sid,TYPE,count_num
FROM music_top_version_day20100623 AS a
LIMIT 1
ON DUPLICATE KEY UPDATE music_top_filtration.count_num = music_top_filtration.count_num + VALUES(count_num)

虽然功能能不太一样,但已经有点差不多了,他对此sql的解释是:sid+type 为唯一索引,如果唯一索引重复则更新count_num字段。也就是说,我上面的例子其实是可以用这个insert into来实现的,因为member_id虽然不是主键,但它是唯一索引。

然后我就尝试着写update,写出了这样的语句:

UPDATE shopnc_member_extend as sme , uchome_goods as ug SET sme.sell_product_count = (select count(*) from uchome_goods as uug where uug.uid=sme.member_id)
WHERE sme.member_id=ug.uid;

执行下来,没问题,只是这个花费的时间啊,超多。。。正在思考的过程中,ThinkinLamp群中的newone又给了个例子,那就是用临时表,当时他写的SQL是这样的:

update user set roleno=(select count(*) from user_has_roles where user_has_roles.member_id=user.member_id)
和我的SQL差不太多,然后他优化了一下,就成了这句(采用了临时表):
update user a, (select count(*) as no,member_id from user_has_roles group by member_id) b set a.roleno=b.no where (a.member_id=b.member_id)
于是,参考newone写的sql,我最终的sql就成了:
UPDATE shopnc_member_extend as sme ,( SELECT seller_id, count( * ) as cnt FROM `shopnc_product_sold` GROUP BY seller_id HAVING seller_id IS NOT NULL ) as tmp
SET sme.sale_score = tmp.cnt
WHERE sme.member_id = tmp.seller_id ;
执行了一下,速度刷刷的。只有0.x秒,oh yeah 。

其间,锅巴哥哥威胁我,要我参加他的mysql高级培训班,在此先鄙视一下。

迪斯尼动画片

迪斯尼动画片

最近美团在卖迪斯尼动画片了,为我们家的小朋友买了一套。本来以为这个玩意上海没有的,于是在北京活动推出的时候,我请朋友从北京帮我买了三套,其余两套送给老家的兄弟了。

结果,今天在美团突然发现,原来上海也有的卖了,郁闷啊。。

http://www.meituan.com/r/i318604

不过,活动时间不长,只有(从现在开始算 2010-09-28 上午11时)

剩余时间

  • 9天
  • 12小时
  • 44分钟
所以,想买的尽快啊。。我主要是看中了这个

本次团购的是由天艺在线提供的正版迪士尼经典大全(黄金典藏版)一套!原价180元,美团价仅售49元,折扣低至2.7折哦!

  • 共16张DVD光碟,含18部迪士尼经典电影+347集迪士尼经典卡通;
  • 国/英/粤三种配音,中/英字幕;
  • 正版产品,商家已向美团提供了详细的出版社销售委托书证明;
  • 包装盒采用磨砂烫金工艺制作,珍藏馈赠佳品;
  • 本套光盘所有节目均由原版母带数字化翻录并修复而成。珍藏的是记忆,请不要用当代的高清动画的标准去要求50年前的经典哦~
如果小朋友不看,自己回忆一下也好,这让我想起了我在几年前在 卓越上 29块购买的 《猫和老鼠》
SQL,大量的SQL

SQL,大量的SQL

这两天在折腾数据,写了很多很多SQL(当然是对我来说,比如象锅巴那种牛人,他们一写就是几百上千行的,我不能比),我只写了100多行。基本上所有的操作都通过SQL完成了,除非实在没办法完成的。才用PHP处理。

对我来说,这两天 insert into xxx (xxx) select xxx from xxx where xxx,写的很多了

还有update a,b set a.xx=b.xx where a.id=b.id之类的也很多

在锅巴哥哥的介绍下,还知道把一句SQL分成多句,或者用下面这张图解决。。。

ff417041c7b9dbc05bbaaf09a85ca65b

嗯,本来想用存储过程的,但赶时间,来不及学了。几年前看的东西全忘光了。靠,晚上回去翻开我的mysql书看一下下先。

WordPress 500错误

WordPress 500错误

昨天,把我的http://neatcn.com迁移到了VPS上(准备过两天,这个站也迁走),迁移过去后用Firefox访问白屏,一直不清楚是什么原因。
后来用IE访问,显示服务器500错误,心里就纳闷了,因为前两天我说过我迁移了ucapi.com,里面也有一个wordpress,那个是正常的,于是我怀疑是.htaccess文件的问题。然后把ucapi.com/wiki/目录下的.htaccess文件CP到了http://neatcn.com的根目录下,结果问题依旧(firefox显示白屏,但如果使用FireBug看,是可以看到显示500错误的。)

心里想着.htaccess文件可能有问题,因为ucapi.com下的.htaccess文件不是在根目录下,那文件里应该是带路径的。把路径去掉后,问题依旧。

然后,把.htaccess文件删除,可是问题仍然存在。

最后没办法,google一下,发现网上说的很多都是指.htaccess文件(还有人说是插件或者皮肤不兼容,我也尝试了删除所有插件和皮肤,结果还是不正常)。这个。。。我就没办法了,于是想到一个最喷血的办法。把wp-config.php备份,原文件删除,进行重装。

安装到最后一步,说是无法生成wp-config.php,让我把内容COPY到原来的wp-config.php文件中,OK,COPY完毕,结果继续安装的时候又显示500错误了,这个时候我就真的不知道做什么了。然后检查一下wp-config.php,突然发现,他与我原来的wp-config.php相比多了一点内容,那就是define("WP_DEBUG",false);,这个玩意看来是从3.0开始才开放的吧?我的博客是从2.x升级上去的,所以没有这个定义。

既然有debug功能,那就打开喽,定义WP_DEBUG为true,继续运行,这时候才发现原来我有一个文件不存在,报了fatal error,然后根据出错提示信息,从本地的wordpress程序中将缺少的文件COPY过去。如此做了大约三次,终于顺利的打开后台界面,兴冲冲的登录进去,选择更新系统,以防还有文件不存在的情况发生。

更新系统的时候,出现了好久不见的FTP用户密码框,这个在以前其实有介绍过Wordpress自动升级和plugin插件更新的问题,但这次我不想这么解决,于是我直接进入命令行,把我的目录的权限改成apache用户,就Over了。

最后,忙到凌晨2点多,http://neatcn.com终于可以正常访问。比较欣慰的在微勃上说了一下,结果被人鄙视说网站速度太慢。。唉,VPS嘛,将就点了。