最新 | 最热门 | 最高评价

+0  记几个常见的Laravel报错

Tag: Technical | PHP
老王 发于 2016年02月29日 18:17 | 点击: 164 | 展开摘要
我已经用了一段时间的 Laravel 框架了,期间遇到了不少问题,有一些调试起来着实不太容易,本文筛选出几个,如果能让大家少走一些弯路,那我就算没白写。

报错:「Can’t swap PDO instance while within transaction」

通过查询 Laravel 源代码,可以确认异常是在 setPdo 方法中抛出的:

<?php

public function setPdo($pdo)
{
if ($this->

查看全文: http://www.udpwork.com/item/15968.html

+0  浅谈CLOSE_WAIT

Tag: Technical | Linux | TCP
老王 发于 2016年01月19日 20:19 | 点击: 133 | 展开摘要
TCP 有很多连接状态,每一个都够聊十块钱儿的,比如我们以前讨论过 TIME_WAIT 和 FIN_WAIT1,最近时不时听人提起 CLOSE_WAIT,感觉有必要梳理一下。

所谓 CLOSE_WAIT,借用某位大牛的话来说应该倒过来叫做 WAIT_CLOSE,也就是说「等待关闭」,如果你还不理解其含义,可以看看 TCP 关闭连接时的图例:

TCP Close

不要被图中的 client 和 server 所迷惑,你只要记住:主动关闭的一方发出 FIN 包,被动关闭的一

查看全文: http://www.udpwork.com/item/15969.html

+0  PgBouncer in action

Tag: Technical | PostgreSQL
老王 发于 2015年12月29日 17:05 | 点击: 108 | 展开摘要
原本我是 MySQL 的忠实粉丝,后来命运使然,接手了一个 PostgreSQL 项目,一边用一边学,遇到了不少问题,本文说说其中的连接池问题。

有人曾经问我「为什么 PostgreSQL 没有 MySQL 流行呢?」,我说是因为 PostgreSQL 没有服侍好 PHP。当然话有戏谑的成分在,不过仔细想想也不无道理,开发那些简单的增删改查程序,PHP 和 MySQL 是绝配,而 PHP 和 PostgreSQL 则明显不搭,其中最重要的一点是:PostgreSQL 连接是

查看全文: http://www.udpwork.com/item/15970.html

+0  Dependency Injection 和 Service Locator

Tag: Technical | PHP
老王 发于 2015年11月11日 17:16 | 点击: 141 | 展开摘要
如果说学院派的 Java 程序员骨子里都浸淫着学究范儿的话,那么游击队出身的 PHP 程序员则从头到脚洋溢着乡土气息。通常他们不太在意理论,一切以实现为先,虽然这样的做法在项目早期能获得不错的收益,但是随着项目的推进,复杂度的提升,缺乏理论基础的弊端终将显现。好在 PHP 社区没有裹足不前,比如说十几年前 Java 社区中流行的 IoC 概念,最近一两年终于被 PHP 社区所接纳。

说起 IoC,其实是 Inversion of Control 的缩写,翻译成中文叫控制反转

查看全文: http://www.udpwork.com/item/15971.html

+0  聊聊代码的割裂感

Tag: Technical | PHP
老王 发于 2015年11月05日 20:01 | 点击: 118 | 展开摘要
早些年,我特别喜欢下围棋,每天都会下几盘。那时候日本围棋不仅高手林立,而且风格迥异,比如:小林光一的地铁流,武宫正树的宇宙流等等,不过我最喜欢的棋手当属大竹英雄,他下棋时追求美感,如果棋形不漂亮,那么他宁可认输也绝不玷污棋盘。后来,我成为了一名程序员,每天都要写不少代码,可惜写了不少丑陋的代码,本文筛选了几个例子,希望大家看过之后都能写出更具美感的代码来。

在聊之前,我们不妨想想割裂到底是什么意思。其实所谓割裂,说白了就是指把原本应该在一起的东西分开了,比如两地分居的夫妻,

查看全文: http://www.udpwork.com/item/15972.html

+0  手把手教你用Strace诊断问题

Tag: Technical | Linux | Strace
老王 发于 2015年10月16日 14:22 | 点击: 125 | 展开摘要
早些年,如果你知道有个 strace 命令,就很牛了,而现在大家基本都知道 strace 了,如果你遇到性能问题求助别人,十有八九会建议你用 strace 挂上去看看,不过当你挂上去了,看着满屏翻滚的字符,却十有八九看不出个所以然。本文通过一个简单的案例,向你展示一下在用 strace 诊断问题时的一些套路。

如下真实案例,如有雷同,实属必然!让我们看一台高负载服务器的 top 结果:

top

技巧:运行 top 时,按「1」打开 CPU 列表,按「shift+p」以

查看全文: http://www.udpwork.com/item/15973.html

+0  Unicode and UTF-8

Tag: Technical | PHP
老王 发于 2015年10月13日 21:12 | 点击: 115 | 展开摘要
绝大多数程序员都听说过 Unicode 和 UTF-8,但是清楚它们之间关系的人就不多了,关于这个问题,与其苍白的陈述它们的概念,不如举例子说明来得自然。

我前些天碰到一个需求:随机生成几个汉字。原本我便对编码之类的问题发怵,所以完全搞不清楚状况,无奈之下我便上网搜索了一个 PHP 版本的实现:

<?php

$zh = '';

for($i = 0; $i < 3; $i++) {
$zh .= '&#'. rand(19968, 4086

查看全文: http://www.udpwork.com/item/15974.html

+0  谈谈Redis的SETNX

Tag: Technical | Redis
老王 发于 2015年09月14日 22:23 | 点击: 128 | 展开摘要
在 Redis 里,所谓 SETNX,是「SET if Not eXists」的缩写,也就是只有不存在的时候才设置,可以利用它来实现锁的效果,不过很多人没有意识到 SETNX 有陷阱!

比如说:某个查询数据库的接口,因为调用量比较大,所以加了缓存,并设定缓存过期后刷新,问题是当并发量比较大的时候,如果没有锁机制,那么缓存过期的瞬间,大量并发请求会穿透缓存直接查询数据库,造成雪崩效应,如果有锁机制,那么就可以控制只有一个请求去更新缓存,其它的请求视情况要么等待,要么使用过期的

查看全文: http://www.udpwork.com/item/15975.html

+0  Laravel队列的一些细枝末节

Tag: Technical
老王 发于 2015年07月31日 23:23 | 点击: 865 | 展开摘要
因为我崇尚简单,所以我憎恨一切所谓的「重量级」框架,比如「Laravel」,有时候这种憎恨甚至到了偏执的程度,以至于如果我看到简历里写着诸如「精通 Laravel」之类的话,那么便会毫不犹豫的 PASS 掉候选人。不过现在我承认有点喜欢「Laravel」了,虽然性能依然是无法回避的短板,但是又有几个网站能触及其性能瓶颈呢?而它丰富的组件则实实在在的节约了开发者大把的时间,比如本文要说的队列。

在 Laravel 里调用队列功能是非常简单的一件事情,详细介绍参考官方文档:

查看全文: http://www.udpwork.com/item/14451.html

+0  实战Sentry

Tag: Technical | Linux
老王 发于 2015年06月19日 17:29 | 点击: 1058 | 展开摘要
不管你用什么编程语言,都会面临如何处理错误日志的问题。很多程序员对错误日志放任自流,直到出现故障了才追悔莫及,如果问我怎么办,我会推荐 Sentry!

Sentry 是一个错误记录和聚合的平台,只要看看它漂亮的界面就会喜欢上它:

sentry

关于如何安装 Sentry,官方文档里已经给出了详细的说明,建议大家仔细阅读,一般通过 Virtualenv 来安装 Sentry,具体可以参考:学习搭建Python环境。

提醒:我在安装 7.5 的时候,测试有循环重定向,如果

查看全文: http://www.udpwork.com/item/14322.html

+0  一个Laravel队列引发的报警

Tag: Technical | Linux
老王 发于 2015年06月10日 17:43 | 点击: 861 | 展开摘要
一台服务器报警了,内存占用过高,奇怪的是集群里其它的服务器都没问题。不过从以往的经验来看:每一个匪夷所思的问题背后,都隐藏着一个啼笑皆非的答案。

首先通过「free -m」确认一下内存情况,发现用掉了 6893M,还剩 976M:

free

然后通过「top」查看一下哪些进程占用内存多,通过「shift + m」按内存排序:

top

虽然通过 free 命令我们能确认系统可用内存不足,但是通过 top 命令我们却没有发现有内存占用大户的进程,那么内存到底都去哪里了呢

查看全文: http://www.udpwork.com/item/14293.html

+0  记一次Auto Increment故障

Tag: Technical | MySQL
老王 发于 2015年05月30日 23:00 | 点击: 846 | 展开摘要
实际上本次故障的素材来自于朋友的朋友,虽然我并不是故障的亲身经历者,但即便只是作为旁观者,依然感觉有所收获,于是乎记录下来以馈读者。

故障的来龙去脉大致是这样的:在一个月黑风高的晚上,苦逼的程序员被一阵急促的报警短信声惊醒,原来是数据库的某个表出问题了,虽然查询操作都正常,但创建操作却都失败了,经过调试,发现原因是表被插入了一行问题数据,其自增字段的值被显式的设置为整型的最大值,导致后续缺省插入的数据不能获取到一个合法的主键值。

我们不妨创建一个测试表说明问题:

CRE

查看全文: http://www.udpwork.com/item/14249.html
|<<<1234567>>>| 一共12页, 133条记录