检查nginx配置,重载配置以及重启的方法

一直使用apache,新的vps使用的是nginx,于是开始折腾nginx了,今天查到了检查nginx配置是否正确和重启的方法,记录下,高手飘过。我的nginx安装在/usr/local/nginx,系统为ubuntu

几个常用的nginx命令

Nginx 安装后只有一个程序文件,本身并不提供各种管理程序,它是使用参数和系统信号机制对 Nginx 进程本身进行控制的。 Nginx 的参数包括有如下几个:

可以这样使用

/usr/local/nginx/sbin/nginx  -参数
  • -c <path_to_config>:使用指定的配置文件而不是 conf 目录下的 nginx.conf 。
  • -t:测试配置文件是否正确,在运行时需要重新加载配置的时候,此命令非常重要,用来检测所修改的配置文件是否有语法错误。
  • -s reload 重载
  • -s stop 停止

nginx启动/重启/停止

这个很简单,就是运行命令:

json_encode数组出现unicode uxxxx的解决方案

端午和上个周末做的微博应用送大礼中设计到ajax返回json的数据格式中,我没有完全使用PHP默认的json_encode来编码,因为这样编码出来的是unicode编码的,也就是\u的编码,虽然unicode编码可以在不同的页面中编码不会出现乱码问题。但是一个汉字编码成unicode会变成\u+4个字符,这样在字符长度上要比汉字多。

因为我的php文件和html声明中都是使用的UTF-8,不会出现编码乱码问题,所以就放弃了直接使用json_encode的方法,而是把汉字先urlencode然后再使用json_encode,json_encode之后再次使用urldecode来解码,这样编码出来的json数组中的汉字就不会出现unicode编码了~
代码如下

//默认为:{"test":"\u6211\u662f\u6d4b\u8bd5"}
$array = array(
    'test'=>urlencode("我是测试")
);
$array = json_encode($array);
echo urldecode($array);
//{"test":"我是测试"}

此举主要是为了节省传输字符数,因为我的送大礼默认会引入几百个好友信息,对于数据的流量还是比较大的~所以采用汉字传输要比unicode字符编码传输要节省带宽~而且处理好了页面编码问题,不会出现乱码现象。

json_encode出null的问题

如果文档编码或者字符串编码(例如UTF-8抓取了一个GBK页面)为非UTF-8,就会出现json_encode编码失败的问题,变现为输出汉字为null。

使用xdebug调试PHP 找出PHP程序的瓶颈

xdebug是PHP的一个扩展应用,有了xdebug就可以轻松的调试PHP程序,有了它,我们就不用使用var_dump()print_r()之类的傻瓜调试函数了。
Xdebug则提供了更多的功能,能全方位的对PHP脚本进行调试。Xdebug主要的功能如下:

  1. 堆栈追踪和函数追踪;
  2. 错误信息;
  3. 内存分配;
  4. 剖析php脚本的信息;
  5. 代码覆盖率分析;
  6. 远程调试分析;

1、Ubuntu搭建xdebug调试环境

安装Xdebug模块

在终端中使用apt-get安装xdebug,命令如下

sudo apt-get install php5-dev php-pear
sudo apt-get install php5-xdebug
然后打开php.ini文件(例如gedit /etc/php5/apache2/php.ini)。进行如下配置;
;加载xdebug动态链接库
extension=xdebug.so
;xdebug分析文件输出路径
xdebug.profiler_output_dir = “/var/www/xdebug/“
;分析器默认是关闭,调试的时候在url中加入XDEBUG_PROFILE=true即可
xdebug.profiler_enable = Off
xdebug.profiler_enable_trigger = 1
重启apache,这样就可以使用xdebug调试PHP了。

2、windows下安装xdebug

以PHP5.1.4,Windows平台为例(其它PHP版本,其它平台请参看官网文档):
1. 登录www.xdebug.org,在首页右侧有一个Windows modules,选择其中的PHP5.1.2+,下载php_xdebug-5.1.2-2.0.0beta6.dll文件;
2. 将下载的php_xdebug-5.1.2-2.0.0beta6.dll放到C:\php5\ext目录,重命名为php_xdebug.dll;
3. 编辑php.ini,加入下面几行:

extension=php_xdebug.dll
[Xdebug]
xdebug.profiler_enable=on
xdebug.trace_output_dir=”I:\Projects\xdebug”
xdebug.profiler_output_dir=”I:\Projects\xdebug”
xdebug.dump.GET=*
xdebug.show_local_vars=1
具体参数PHP.ini说明参见ubuntu下的注释。

3、使用xdebug进行PHP调试

xdebug调试变量更加友好

Xdebug重写了php里面var_dump()函数。
xdebug里的var_dump()给变量对象有不同的颜色,显示类型长度,还可以控制显示层次,显示的方式经过格式化,清晰友好。
需要使用此功能,有如下参数需注意。

修改获取验证码图片到本地的PHP程序

昨天写了《练手:一个获取验证码图片到本地的PHP程序》的文章,对于验证码为jpg格式的图片是可以正常输出的,对于png、gif的验证码则不能正常使用,今天稍微修改一下PHP代码,使其可以支持png、gif、jpg三种格式的验证码。
PHP判断图片的格式可使用php内置的exif_imagetype函数,非常方便,
关于exif_imagetype的详细使用方法可以访问:http://php.net/manual/en/function.exif-imagetype.php

练手:一个获取验证码图片到本地的PHP程序

最近项目不是很大,所以时间比较的空间,昨天琢磨着写点东西,想起了前几天电信公司投票选微笑天使的活动,投票是要填写验证码的,想了下想写个投票作弊程序,可是等我放假回来,人家活动已经结束了,昨天突然想起来,就写了一个获取验证码图片到本地的PHP程序,以备今后有类似的投票活动可以直接拿来使用。

程序采用了PHP的GD库,原理很简单,就是先建立一张空白图片,然后把验证码的图片使用PHP GD库中的imagecreatefromjpeg函数建立一个image对象,最后计算图片的长宽,再次使用PHP内置的imagecopy复制到一开始建立的空白图片上去。
全部代码如下:

利用百度ping服务API加快文章收录,秒收不是梦

上一篇文章提到了谷歌的ping服务接口,其实国内的搜索引擎百度也有类似的服务,今天就介绍下百度博客ping服务,百度博客Ping服务的详细介绍,请移步:http://www.baidu.com/search/blogsearch_help.html#n7。百度的ping服务也是基于XML-RPC标准协议,但是与谷歌ping服务不同的是百度的ping发送的xml格式不同,我们需要使用string节点包裹内容。

例如:


<?xml version="1.0" encoding="UTF-8"?>
<methodCall>
<methodName>weblogUpdates.extendedPing</methodName>
<params>
<param>
<value><string>断桥残雪部落格</string></value>
</param>
<param>
<value><string>http://js8.in/</string></value>
</param>
<param>
<value><string>http://js8.in/644.html</string></value>
</param>
<param>
<value><string>http://js8.in/feed</string></value>
</param>
</params>
</methodCall>

根据上篇提到的谷歌接口,我们只要改变一下提交的xml内容即可,当然百度ping服务返回的判断也是跟谷歌的不同,也可以做相应的修改,

利用google博客的ping服务接口API加快网站收录

谷歌博客推出了ping服务已经很长时间了,如果我们的博客是wordpress可以很方便的设置ping服务,但是如果我们的博客不是wordpress,或者我们的网站程序是自己手写的,那么就要自己写RPC代码了。今天断桥残雪分享一下自己写的PHP的XML-RPC代码。在此之前先说说ping服务的好处以及wordpress的ping设置。

配置ping服务,加快收录速度

谷歌的ping服务是一种快速收录的方法,打个比方就是:我们写了一篇文章想要谷歌收录,我们就可以使用ping服务来通知下谷歌,要googlebot尽快来抓取收录。谷歌官方的解释:

通过 Google“博客搜索”Ping API, 用户可以程序化的方式将博客内容的更新通知给 Google“博客搜索”引擎。这对于经常更新博客内容的用户尤其有用。博客服务提供商的管理人员也可以利用此API将其平台上的博客内容变化向 Google 通告,以便 Google“博客搜索”及时抓取来自这一服务提供商的最新内容。为设置对 Google“博客搜索”的自动 Ping 机制,请按照如下所述设置XML-RPC客户端或REST客户端以发送请求。您可以任选一种方法进行通知;两者都将按照相同的方式进行处理。

wordpress设置ping的方法

wordpress自身就带着ping服务,只要我们配置一下就可以了,步骤是:设置→撰写→更新服务。常用的ping服务有以下几个:

http://rpc.pingomatic.com/
http://ping.baidu.com/ping/RPC2(百度的)
http://blogsearch.google.com/ping/RPC2(谷歌的)
http://api.my.yahoo.com/RPC2(雅虎的)
http://api.my.yahoo.com/rss/ping(雅虎的)
http://www.feedsky.com/api/RPC2(feedsky的)

谷歌ping服务的PHP代码

关于RPC的详细介绍可以移步维基百科,谷歌ping服务的标准:

RPC端点: http://blogsearch.google.com/ping/RPC2
调用方法名: weblogUpdates.extendedPing
参数: (应按照如下所列的相同顺序传送)

* 站点名

  • 站点URL
  • 需要检查更新的页面URL
  • 相应的RSS、RDF或Atom种子的URL
  • 可选:页面内容的分类名称(或标签)。您可以指定多个值,之间用’|’字符进行分隔。

Sina App Engine开发实例:天气预报的定时短信(二)

昨天简单介绍了下新浪App Engine的应用,并且介绍了通过weather.com.cn的接口获取天气预报的方法。今天继续开始我们的SAE开发实例之旅。今天主要介绍下使用飞信接口发送短信和使用Sina App Engine的crontab(计划任务)功能。

Sina App Engine开发实例:天气预报的定时短信(一) | 天气预报的定时短信(二)

广告时间:

新浪微博送祝福方法

1、在发布新浪微博的时候,采用以下格式,会在5分钟之内把您的祝福发送出去,并且收到一个@回复:

@微博送祝福:祝××:祝福的内容

2、登录http://js8.in/love,使用新浪微博账号登陆,然后给自己的粉丝、好友送祝福

每一个祝福都会收到一个@回复,并且具有自己独一无二的永久URL地址,你可以复制发送给自己的好友,要TA知道你送的祝福~

介绍下这次开发实例中使用的飞信接口

此次开发使用的Fetion(飞信)接口是由张宴提供的第三方Fetion API,通过这个接口可以方便的给自己和自己的好友发送短信,具体的介绍,请移步这里
调用的格式如下:

http://sms.api.bz/fetion.php?username=您的移动飞信登录手机号&password=您的移动飞信登录密码&sendto=接收短信的飞信好友手机号(也可以是你自己的手机号)&message=短信内容
可以使用GET,POST方法。
结合上篇中介绍的SAE的FetchURL方法,我们可以很轻松的写出来,飞信接口发短信的PHP代码:

 $sms["username"] = 13812345678;
 $sms["password"] = "password";
 $sms["sendto"] = 13812345678;
 $sms["message"] = "这是一条测试短信!";
$f = new SaeFetchurl();
 $f-&gt;setMethod('post');
 $f-&gt;setPostData( $sms);
 $ret = $f-&gt;fetch('http://sms.api.bz/fetion.php');
 var_dump($ret);

PS:对于该接口是否记录飞信密码,断桥残雪不清楚,不过张宴说自己不记录,大家自己辨别。

Sina App Engine的Crontab服务

用过linux系统的应该知道crontab是Linux系统下的计划任务,也就是我们可以通过配置Crontab,让电脑在固定的时间运行固定的程序。断桥残雪通过crontab的服务实现了在新浪微博以:“@微博送祝福:祝××:祝福的内容”的格式发布微博,可以在5分钟内送出祝福,并且收到@回复的功能。
新浪App Engine对cron的介绍可以移步:http://sae.sina.com.cn/?m=devcenter&catId=26
我们可以通过修改SDK文件夹里面的config.yaml来开启crontab任务。格式如下:

Sina App Engine开发实例:天气预报的定时短信(一)

新浪的云计算平台(Sina App Engine)已经开发一段时间了,一直处于内测阶段,最近找到一个邀请码,注册了一个SAE,我也上云了!使用SAE并且做了一个微博送祝福的应用。通过crontab的服务实现了在新浪微博以:“@微博送祝福:祝××:祝福的内容”的格式发布微博,可以在5分钟内送出祝福,并且收到@回复的功能。

今天结合张宴提供的飞信API接口,做个定时发送天气预报的SAE应用,算是新浪SAE的教程吧。

Sina App Engine开发实例:天气预报的定时短信(一) | 天气预报的定时短信(二)

广告时间:

新浪微博送祝福方法

1、在发布新浪微博的时候,采用以下格式,会在5分钟之内把您的祝福发送出去,并且收到一个@回复:

@微博送祝福:祝××:祝福的内容

2、登录http://js8.in/love,使用新浪微博账号登陆,然后给自己的粉丝、好友送祝福

每一个祝福都会收到一个@回复,并且具有自己独一无二的永久URL地址,你可以复制发送给自己的好友,要TA知道你送的祝福~

Sina App Engine简介

Google App Engine大家应该不陌生吧,SAE是类似产品,不同的是GAE提供的是Java和python支持,而新浪的SAE提供的是PHP的支持,包括基本的PHP5、mySQL5.,也包括一些高级的应用Crontab(定时任务),memcache(缓存)、SMTP(邮箱服务),新的功能还在添加中。最让我们兴奋的是提供了crontab计划任务功能,我们可以不花一分钱就能做到定时任务,例如定时发送邮件(结合SMTP),还有今天的实例,天气预报定时短信。而且这些服务我们需要花费少量的“云豆”就可以实现!

详情请参阅:http://sae.sina.com.cn/

Sina App Engine基本操作教程

相对于GAE的黑脸CMD命令行操作,SAE的图形界面更加亲切。注册一个SAE账号之后,我们就可以下载Sina App Engine SDK 包括了windows版本和Mac/Linux版本。

具体是SDK操作教程请看在线视频:http://xhprof.tools.sinaapp.com/demo_beta/

天气预报抓取程序,采用SAE的FetchURL类

新浪微博应用开发之一:授权机制介绍

题记:国庆期间没有出去玩,也没有回家,只有蜗居在家,闲来无事,研究了下新浪微博人人网的开发平台。特把研究成果及其经验写成博客,分享给大家。首先先说说我开发的新浪微博应用:微博祝福,以及人人网应用:人人祝福墙。这两个应用都是根据爱墙程序修改而成,并且采用了我的jquery插件wBox

今天主要讲一讲新浪微博应用开发的授权机制问题,因为新浪最近跟CSND合作举办一个APP开发大赛,所以今天想说下新浪微博的应用开发。新浪微博是采用两种授权方法:一种是HTTP普通验证(Basic Authentication)方式,另外一种是OAuth,前面一种是最直接的方法,用户输入账号密码登陆,而第三方网站需要记录用户的账号密码下次才能认证成功,不然每次都要输密码很麻烦,并且对于用户来说很不安全。第二种OAuth是比较安全的,用户需要跳到新浪官方输入账号密码,然后通过三步来换取Access Token,说起来比较麻烦,不过得到了这个Token之后就可以请求到新浪微博的API了,用户还可以随时通过新浪微博取消这个认证授权。

HTTP普通验证

最简单的认证方式,断桥残雪之前写的Follow5 API类就是使用这样的方法,其原理就是使用curl一个URL来请求API接口,已获得开放的数据。
关于HTTP普通验证的方法,大家可以参考我之前写的一个Follow5 API PHP类,关于curl的详细操作,大家可以看这篇文章《cURL常用的几个PHP函数

OAuth认证方法