Meteor常见错误汇总

1、Error: spawn ENOMEM 错误

例如:

原因:

这个错误提示是机器内存溢出的错误提示,这个时候最好能够检查下本机的可用内容是否足够

2 、ReferenceError: Session is not defined
例如:

原因:因为Session只能在客户端使用,所以你需要将客户端的文件全部放置在/client目录下,或者将代码包含在

 

使用PHP_EOL处理PHP中的换行符

程序猿都在基本程序处理中都会遇到关于换行符的处理,这主要源于各个平台下的换行符有着不同的表现形式

Linux下的换行符:\n

Windows下的换行符:\r\n

Mac下的换行符:\r

现在如果我们需要在不同的操作系统下替换换行符,我们需要怎么做呢?

比较笨拙的方法是,在判断不同的操作系统,然后使用str_replace()函数进行替换

例如在windows下:

当然,更加高明的方法,是利用str_replace的函数特性传入一个数组或者利用正则的方式

例如

然而,如果此时我们需要在不同的操作平台下写入文本的时候加入换行符呢,此时的后面2种方法显然并不太好用了,

这个时候使用PHP_EOL这个常量就显得非常有必要了。

PHP_EOL是一个些已经定义好的变量,代表php的换行符,这个变量会根据平台而变,在windows下会是/r/n,在linux下是/n,在mac下是/r.

所以在回到上面的需求,如果是替换换行符

只需要

而写入换行符只需要如此即可

PHP判断数组键值存在的三种方法对比(empty,isset,array_key_exists)

区别

先看一个实例代码

输出结果如下:

 

注意红色高亮部分,现在我们可以简单总结下了

  • empty: 参数为0或为NULL,empty均返回TRUE,详细情况可以参见empty官方手册
  • isset: 参数为NULL时,返回FALSE,0与NULL在PHP中是有区别的,isset(0)返回TRUE
  • array_key_exists: 纯粹的判断数组键值对是否存在,无论值是多少

所以,从准确性的角度来看,array_key_exists是最准确的!

性能测试

然而是不是我们在任何时候都应该使用array_key_exists 来进行判断呢,我们分别对大数组和小数组的情况进行测试,测试代码如下:

测试结果如下

小数组:

  • array_key_exists: float(0.18357992172241)
  • empty: float(0.072798013687134)
  • isset: float(0.070242881774902)

大数组:

  • array_key_exists: float(0.57489585876465)
  • empty: float(0.0068421363830566)
  • isset: float(0.0069410800933838)

结果让我们大吃一惊,可以明显看出的,最准确的array_key_exists的效率确是最差,而empty和isset的效率相差无几

使用建议

既然没有完美的使用方法,我们只能针对不同的情况做出应变了!!

(鉴于empty与isset性能类似,但是isset准确性较高,这里就只比较isset与array_key_exists)

  • 如果数组不可能出现值为NULL的情况,建议使用isset
  • 如果数组中经常出现值为NULL的情况,建议使用array_key_exists
  • 如果数组中可能出现值为NULL,但是较少的情况,建议结合isset与array_key_exists使用,如“if (isset($arr[‘key’]) || array_key_exists(‘key’, $arr)){/*do somthing*/}”。此方法兼顾了性能和准确性,但是代码变长了。

参考资料

http://www.cnblogs.com/bourneli/archive/2012/10/12/2721634.html

http://stackoverflow.com/questions/6884609/array-key-existskey-array-vs-emptyarraykey/6884685#6884685

PHP中使用strtotime的时区问题

由于没有认真阅读手册,在使用strtotime转换时间的时候出现的错误

通过strtotime(2013-02-04)转换的时间戳 再经过转换工具还原回去后发现 时间已经变为“2013-02-04 06:00:00”

相差了6个小时,程序员的嗅觉告诉我这一定和时区有关系了。

于是重新翻阅了手册里的strtotime函数(http://il1.php.net/manual/zh/function.strtotime.php)

发现了下面这段

本函数将使用 TZ 环境变量(如果有的话)来计算时间戳。自 PHP 5.1.0 起有更容易的方法来定义时区用于所有的日期/时间函数。此过程在date_default_timezone_get() 函数页面中有说明。

于是,使用date_default_timezone_get()函数输出服务器的时区,竟然是Europe/Berlin,好吧看来需要更改服务器的时区了。

更改服务器的时区有2种方法

1、修改php.ini文件,找到以下内容

去掉date.timezone =前的分号,在等号后面加上 Asia/Shanghai 或者 Asia/Chongqing

2、在PHP中需要设置时区的地方使用date_default_timezone_set()函数设置

例如 date_default_timezone_set(‘Asia/Shanghai’);

由于我的项目里使用的CI框架,于是在config/config.php的配置文件末尾加上以下代码就可以全局设置时区

jQuery中的attr和prop方法的区别对比

attr方法:http://api.jquery.com/attr/

prop方法:http://api.jquery.com/prop/

prop是jQuery1.6新增的方法,他们一个共同的功能就是获取/设置属性,而且他们的使用方法都是相同的,可以设置一条或者多条属性

源码分析

大家可能在想,既然功能相似,为什么还要引入prop功能,为此我们可以从源码上分析入手:

attr源码

prop源码

注意两者代码中的关键设置/获取属性的代码

attr中是elem.setAttribute( name, value + “” )和ret = elem.getAttribute( name ),使用的是DOM中的API方法

而prop是return ( elem[ name ] = value )和return elem[ name ] 相当于document.getElementById(el)[name] = value 获取的是转换为JS对象的属性

代码测试

下面通过实际的代码分析下:

HTML代码

JS代码

  1. el.attr(“style”)输出undefined,因为attr是获取的这个对象属性节点的值,很显然此时没有这个属性节点,自然输出undefined
  2. el.prop(“style”)输出CSSStyleDeclaration对象,对于一个DOM对象,是具有原生的style对象属性的,所以输出了style对象
  3. 至于document.getElementById(“test”).style和上面那条一样

首先用attr方法给这个对象添加abc节点属性,值为111,可以看到html的结构也变了

  1. el.attr(“abc”)输出结果为111,再正常不过了
  2. el.prop(“abc”)输出undefined,因为abc是在这个的属性节点中,所以通过prop是取不到的

我们再接着来:

我们再用prop方法给这个对象设置了abc属性,值为222,可以看到html的结构是没有变化的。输出的结果就不解释了。

使用建议

在遇到要获取或设置checked,selected,readonly和disabled等属性为boolean(布尔值类型的),用prop方法显然更好,而在其他时候仍然使用attr,比如像下面这样:

HTML代码

JS代码

也可以参考官方建议的列表

Attribute/Property .attr() .prop()
accesskey
align
async
autofocus
checked
class
contenteditable
draggable
href
id
label
location ( i.e. window.location )
multiple
readOnly
rel
selected
src
tabindex
title
type
width ( if needed over .width() )

 

另外,同等情况下,prop的性能更高,因为attr需要访问DOM属性节点,访问DOM是最耗时的。

 

参考资料

http://www.javascript100.com/?p=877

WordPress ping服务及网站提交入口收集

2014.7.28测试可用

Ping RPC服务

百度:http://ping.baidu.com/ping/RPC2
谷歌:http://blogsearch.google.com/ping/RPC2
Bloglines:http://www.bloglines.com/ping
PingOMatic:http://rpc.pingomatic.com
Feedsky:http://www.feedsky.com/api/rpc2(没有返回值,不知道是否可用)

网站提交入口

百度:http://zhanzhang.baidu.com/sitesubmit
谷歌:http://blogsearch.google.com/ping?hl=zh-CN
搜狗:http://www.sogou.com/feedback/blogfeedback.php
360搜索:http://info.so.360.cn/site_submit.html
Bing:http://www.bing.com/toolbox/submit-site-url

 

Syntax Highlighter For WordPress 的两个问题的修正

Syntax Highlighter For WordPress [官网]是我在wordpress高亮语法插件首选的插件。Syntax Highlighter For WordPress实际上就是Syntax Highlighter[官网]封装的wordpress插件,Syntax  Highlighter是一个JavaScript库,可以高亮代码,而不依赖与后台程序,纯JS+CSS实现。

Syntax Highlighter For WordPress安装完毕后,在使用过程中会出现下面两个问题

1、代码的右上角会出现一个小问号,点击显示关于页面,有时候会妨碍正文的代码

synatxhighlighter01
synatxhighlighter01

解决方法:

打开/plugins/syntax-highlighter/3.0.83/js 下的shCore.js文件,会发现他是一个压缩的js文件,我们可以通过(http://jsbeautifier.org/)将代码解压,然后找到以下代码

toolbar:true 更改为toolbar:false,然后将代码使用base62 encode的方式打包回去(http://dean.edwards.name/packer/),我们就会发现小问号消失了。

2、chrome(谷歌浏览器)下总是会显示滚动条

经过插件美化后的代码我们会发现在chrome下总是会显示竖向的滚动条,而在FireFox下确实显示正常的

synatxhighlighter02
synatxhighlighter02

解决方法:

打开/plugins/syntax-highlighter/3.0.83/css 下的shCore.css(也可能是shCoreDefault.css)文件,找到以下代码

修改为如下代码,保存即可

===============================================================
2014.07.28补充:

由于Syntax Highlighter For WordPress貌似不太识别pre标签,导致生成的代码中会多一些Pre标签的代码,另外wordpress编辑器会自动吞掉br标签,所以在切换编辑器“文本”和“可视化”状态的时候会出现空格丢失的情况,因此综合考虑,已经更换为Syntax Highlighter Evolved[插件主页]插件,由于这两个插件师出同门,所以切换插件后你几乎不用做任何设置,当然,由于使用共同的库函数,所以这2个插件你只能同时使用一款。

3.充电时间

使用JavaScript版的Syntax Highlighter的步骤:

  1. 在页面中引用基本文件:shCore.js和shCore.css
  2. 添加对应语言的模版引用,比如JavaScript的就用shBrushJScript.js。支持列表:http://alexgorbatchev.com/SyntaxHighlighter/manual/brushes/
  3. 添加主题样式,比如默认主题:shThemeDefault.css
  4. 书写代码,使用 <pre class=”brush:js”>alert(“Hello World”);</pre>
  5. 调用 SyntaxHighlighter.all() 这个JavaScript方法。

 

 

WordPress文章图片不居中的解决方法

问题描述

使用wordpress的编辑器在文章中插入图片,使用编辑器自带的居中,但是在实际文章中并不居中

问题分析

使用开发工具在浏览器中快速定位到文章问题的相应HTML代码,发现诸如以下代码:

从代码可以看出图片链接和图片描述外层包含了一个div,class的属性值为wp-caption和aligncetner,于是接着定位css属性发现并没有相应的设置,问题应该出在这里。

问题解决

既然没有,那么我们自己手动加上css代码,编辑style.css文件,添加以下代码

 问题补充

使用上述代码使图片居中后,如果图片的宽度等于body的宽度,图片可能会超过body的边界。此时我们继续定位css代码,这时因为在wp-caption的div强制定义了div的宽度(style=”width:xxx px”),并且这个宽度是大于图片宽度的,因此在上述情况下会导致偏移。

如何解决呢?

我们可以通过修改wp-includes下的media.php,找到了类似下面的代码

将其中的10修改为0保存即可。(3.7版本以后好像修复了这个问题。)

 

谷歌被墙之后的WordPress博客重生

前言:

6月份的一天,Jason.z像往常一样访问自己的工作室网站AnAn Studio,然而意向不到的是,打开首页竟然用了用了1分钟,并且首页的幻灯片样式全乱,重新刷新了几次都是这么个情况,这是什么情况?

诊断:

由于首页的幻灯片使用的jquery插件,作为开发真的习惯思维,一定js出现了问题,于是,chrome里使用F12快速调出开发者工具,定位在Network和Console栏然后重新刷新页面,发现网站调用google cdn的Jquery插件一直处于Pending状态,最终超时并且加载失败。原来网站访问变慢的原因,是因为加载jquery出错导致的。顺势打开google搜索也发现无法打开,哈哈,原来是Google抽风了,暂且不管吧。

再诊断:

兴冲冲的第二天,第三天,第四天。。一个星期访问,问题还是如此,看来这次要出大事了,询问了其他人,很多也反映了类似的情况,不仅包括谷歌搜索,连同Gmail,订阅,地图等一系列的服务都出现无法访问的情况,看来这是ZF是动真格了,如今技术人员也成为了政治的牺牲品。

方案:

暂且收起那徒劳的悲伤,回归到问题上,竟然是因为google cdn的jquery文件引用那么,那么将Jquery文件换成本地引用或者其他CDN地址即可,然而诸如字体和地图的其他google库呢?

翻阅很久,发现数字公司360竟然提供了和google同样的CDN服务,具体戳http://libs.useso.com/ ,这个必须要赞的,修改 \wp-includes\script-loader.php下的fonts.googleapis.com替换为fonts.useso.com即可。

然而,当你使用国外的WP商业主题时候,会有其他很多地方都会使用Google服务,如何查找这些代码呢,很简单,这个时候可以将整个主题下载到本地,然后通过一些编辑器比如Sublime Text或者Notepad++都有在文件夹中搜索内容的功能,

搜索 ajax.googleapis.com 替换为ajax.useso.com

fonts.googleapis.com 替换为 fonts.useso.com

至于maps.google 目前只能暂时屏蔽掉或者使用其他国内的地图API了。

 

 

 

PHP+MySQL全能权威指南读书笔记

  • 书籍名称:《PHP+MySQL全能权威指南读书笔记》
  • 花费时间:2天
  • 制作工具:Xmind
  • 个人评价:书本整体性不错,内容覆盖面较广,很多知识都趋向与新技术(例如PHP6),并且作者在讲述过程中也提供了不少经验和建议。

  笔记下载

[su_custom_lightbox src=”http://blog.jason-z.com/wp-content/uploads/2014/07/PHP+MySQL%E5%85%A8%E8%83%BD%E6%9D%83%E5%A8%81%E6%8C%87%E5%8D%97%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0-745×1024.png”]PHP+MySQL全能权威指南读书笔记[/su_custom_lightbox]

PHP+MySQL全能权威指南读书笔记
PHP+MySQL全能权威指南读书笔记