十二 31

php源码在windows上正常运行,在linux不显示

如果确认不是php版本问题,需要检查定义常量时获取所在目录并定义ROOT根目录的方法。

windows系统路径格式与linux系统路径格式是不同的(“\”和“/”),所以在设置ROOT路径时需要先进行替换。

windows路径 D:\www\web
linux路径 /www/web

 

十二 28

MySQL语句:如果存在则更新,不存在则插入新记录

INSERT INTO … ON DUPLICATE KEY UPDATE …

表结构:

该语句是基于唯一索引或主键才可使用的,如下语句:

必要条件:其中字段id或keyword或count,至少有一个字段属性是主键或唯一索引。

语句解释:如果查询主键id=1或者唯一索引keyword=’织梦先生’的记录存在,则更新此记录的count字段 count=count+1;如果没有查询主键id=1或者唯一索引keyword=’织梦先生’的记录都不存在,则插入一行记录。

其它:

假定id=1的记录存在,则下面语句与上面语句是等效的

 

十二 18

JQuery获取DIV宽度与高度(width,padding,margin,border)

一般讲的宽度指的是内容宽度,但一个 div 的实际宽度不仅只于内容宽度,尤其在做 CSS 排版时更不能搞错,必须同时考虑 Padding、Border 与 Margin 的宽度,四个加起来才是 div 真正占有的宽度。

JQUERY 获取 DIV 宽度与高度(width,padding,margin,border)全都有了!

宽度与高度概念一样,只差水平与垂直向而已。

Margin 有个特色,就是当两个有 margin的 div 靠在一起时,两个 div 紧邻的 margin 不是相加,而是取其大者,举例来说,两个 10px margin 的 div 并在一起只会有 10px margin 的距离,若是一个 20px margin,另一个为 10px margin,则会有 20px 的 margin。

但是获取当前元素的全部宽度的时候,还是获取自身的margin+content+padding+border的值。

十二 06

两个故事理解阻塞非阻塞与同步异步的区别

故事一:

“阻塞”与”非阻塞”与”同步”与“异步”不能简单的从字面理解,提供一个从分布式系统角度的回答。
1.同步与异步
同步和异步关注的是消息通信机制 (synchronous communication/ asynchronous communication)
所谓同步,就是在发出一个*调用*时,在没有得到结果之前,该*调用*就不返回。但是一旦调用返回,就得到返回值了。
换句话说,就是由*调用者*主动等待这个*调用*的结果。

而异步则是相反,*调用*在发出之后,这个调用就直接返回了,所以没有返回结果。换句话说,当一个异步过程调用发出后,调用者不会立刻得到结果。而是在*调用*发出后,*被调用者*通过状态、通知来通知调用者,或通过回调函数处理这个调用。

典型的异步编程模型比如Node.js

举个通俗的例子:
你打电话问书店老板有没有《分布式系统》这本书,如果是同步通信机制,书店老板会说,你稍等,”我查一下”,然后开始查啊查,等查好了(可能是5秒,也可能是一天)告诉你结果(返回结果)。
而异步通信机制,书店老板直接告诉你我查一下啊,查好了打电话给你,然后直接挂电话了(不返回结果)。然后查好了,他会主动打电话给你。在这里老板通过“回电”这种方式来回调。

2. 阻塞与非阻塞
阻塞和非阻塞关注的是程序在等待调用结果(消息,返回值)时的状态.

阻塞调用是指调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会返回。
非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程。

还是上面的例子,
你打电话问书店老板有没有《分布式系统》这本书,你如果是阻塞式调用,你会一直把自己“挂起”,直到得到这本书有没有的结果,如果是非阻塞式调用,你不管老板有没有告诉你,你自己先一边去玩了, 当然你也要偶尔过几分钟check一下老板有没有返回结果。
在这里阻塞与非阻塞与是否同步异步无关。跟老板通过什么方式回答你结果无关。

故事二:

老张爱喝茶,废话不说,煮开水。
出场人物:老张,水壶两把(普通水壶,简称水壶;会响的水壶,简称响水壶)。
1 老张把水壶放到火上,立等水开。(同步阻塞)
老张觉得自己有点傻
2 老张把水壶放到火上,去客厅看电视,时不时去厨房看看水开没有。(同步非阻塞)
老张还是觉得自己有点傻,于是变高端了,买了把会响笛的那种水壶。水开之后,能大声发出嘀~~~~的噪音。
3 老张把响水壶放到火上,立等水开。(异步阻塞)
老张觉得这样傻等意义不大
4 老张把响水壶放到火上,去客厅看电视,水壶响之前不再去看它了,响了再去拿壶。(异步非阻塞)
老张觉得自己聪明了。

所谓同步异步,只是对于水壶而言。
普通水壶,同步;响水壶,异步。
虽然都能干活,但响水壶可以在自己完工之后,提示老张水开了。这是普通水壶所不能及的。
同步只能让调用者去轮询自己(情况2中),造成老张效率的低下。

所谓阻塞非阻塞,仅仅对于老张而言。
立等的老张,阻塞;看电视的老张,非阻塞。
情况1和情况3中老张就是阻塞的,媳妇喊他都不知道。虽然3中响水壶是异步的,可对于立等的老张没有太大的意义。所以一般异步是配合非阻塞使用的,这样才能发挥异步的效用。 Continue reading

十二 06

mutable variable accessible from closure

使用WebStorm开发百度地图API时,在WebStorm中变量new_info提示:mutable variable accessible from closure…,译:可从闭包中访问的可变变量。在实际运行中,函数_translateCallback2()的形参info接收到元素的个数总是小于变量new_info传入元素个数,原因是在translate()函数的回调没有执行完,for就进行了下一个循环,或者是下几个循环。

解决方法:

1、在使用for循环时,不要使用带有回调函数的方法;

2、如果一定要使用带有回调函数的方法,那就用立即执行匿名函数括起来,如下:

(function(){ …… })(i);