<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<head><meta forua="true" http-equiv="Cache-Control" content="max-age=0" /></head>
<card title="PHP使用函数gmstrftime、gmdate输出英文时间日期的安全方法（RFC 1123格式）" id="card1">
<p> 游客</p><p>
标题:PHP使用函数gmstrftime、gmdate输出英文时间日期的安全方法（RFC 1123格式）<br/>
正文:<br/>
最近项目中要为一个rest服务写客户端，其中的签名校验需要在HTTP Header中生成一个RFC 1123格式的Date。这个问题比较好解决，简单翻阅了PHP文档，使用gmstrftime这个函数就能解决。代码如下:string gmstrftime ( string $format [, int $timestamp = time() ] )<br/>调用的代码如下：代码如下:echo gmstrftime(&quot;%a, %d %b %Y %T %Z&quot;,time());<br/>//输出：Tue, 01 Apr 2014 16:16:07 GMT<br/>调试过程中发现，在另外一台电脑上，输出并不像预期中的结果，然后产生了中文：代码如下:<br/>二, 01  4 2014 16:20:02 GMT<br/>继续翻阅文档，发现文档的注释中有说明，这个函数的结果受setlocale结果的影响，既收当前系统默认的语言的影响。使用下面的命令可以查看当前系统已安装的语言：代码如下:<br/>locale -a<br/>那么根据刚刚分析的结果，将setlocale强制指定为英语就没问题了，代码如下：代码如下:setlocale(LC_TIME, 'en_US');<br/>echo gmstrftime(&quot;%a, %d %b %Y %T %Z&quot;,time());<br/>至此文章应该已经结束了，不过可惜的是测试用的Ubuntu机器上，因为是Live CD版，恰好没有en_US这个语言，但是有一个en_US.UTF-8。这个时候心理打鼓，这种做法似乎不太安全，我没办法确定运行代码的客户机上，到底有en_US还是有en_US.UTF-8。还好看到文档里的一段comments，可以用gmdate来代替，该函数不受setlocale结果的影响：代码如下:gmdate('D, d M Y H:i:s') . ' GMT';<br/>Case closed~需求虽小，要写好并不容易，以后还要多加努力。<br/><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=1560&amp;Page=1">[&lt;&lt;]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=1560&amp;Page=1">[[1]]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=1560&amp;Page=1">[&gt;&gt;]</a><br/>
<br/>
<a href="wap.asp?act=Com&amp;id=1560">查看评论(0)</a><br/>
<a href="wap.asp?act=AddCom&amp;inpId=1560">发表评论</a><br/><br/>

<br/>

<br/>
<a href="http://camnpr.com/wap.asp">首页</a>
</p>
</card>
</wml>