PHP输出英文时间日期的安全方法(RFC 1123格式)


Posted in PHP onJune 13, 2014

最近项目中要为一个rest服务写客户端,其中的签名校验需要在HTTP Header中生成一个RFC 1123格式的Date。

这个问题比较好解决,简单翻阅了PHP文档,使用gmstrftime这个函数就能解决。

string gmstrftime ( string $format [, int $timestamp = time() ] )

调用的代码如下:
echo gmstrftime("%a, %d %b %Y %T %Z",time());
//输出:Tue, 01 Apr 2014 16:16:07 GMT

调试过程中发现,在另外一台电脑上,输出并不像预期中的结果,然后产生了中文:
二, 01  4 2014 16:20:02 GMT

继续翻阅文档,发现文档的注释中有说明,这个函数的结果受setlocale结果的影响,既收当前系统默认的语言的影响。使用下面的命令可以查看当前系统已安装的语言:
locale -a

那么根据刚刚分析的结果,将setlocale强制指定为英语就没问题了,代码如下:
setlocale(LC_TIME, 'en_US');
echo gmstrftime("%a, %d %b %Y %T %Z",time());

至此文章应该已经结束了,不过可惜的是测试用的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';

Case closed~需求虽小,要写好并不容易,以后还要多加努力。
PHP 相关文章推荐
PHP4之真OO
Oct 09 PHP
PHP生成静态页面详解
Nov 19 PHP
php正则表达式(regar expression)
Sep 10 PHP
PHP中通过HTTP_USER_AGENT判断是否为手机移动终端的函数代码
Feb 14 PHP
PHP实现视频文件上传完整实例
Aug 28 PHP
Laravel 5 框架入门(三)
Apr 09 PHP
thinkPHP显示不出验证码的原因与解决方法分析
May 20 PHP
ubutu 16.04环境下,PHP与mysql数据库,网页登录验证实例讲解
Jul 20 PHP
关于PHP中协程和阻塞的一些理解与思考
Aug 11 PHP
PHP设计模式之装饰器模式实例详解
Feb 07 PHP
Laravel框架执行原生SQL语句及使用paginate分页的方法
Aug 17 PHP
laravel-admin 管理平台获取当前登陆用户信息的例子
Oct 08 PHP
PHP中多维数组的foreach遍历示例
Jun 13 #PHP
PHP根据传来的16进制颜色代码自动改变背景颜色
Jun 13 #PHP
php smarty truncate UTF8乱码问题解决办法
Jun 13 #PHP
PHP根据传入参数合并多个JS和CSS文件的简单实现
Jun 13 #PHP
Codeigniter上传图片出现“You did not select a file to upload”错误解决办法
Jun 12 #PHP
CodeIgniter框架过滤HTML危险代码
Jun 12 #PHP
让CodeIgniter的ellipsize()支持中文截断的方法
Jun 12 #PHP
You might like
php正则校验用户名介绍
2008/07/19 PHP
PHP文件读写操作之文件写入代码
2011/01/13 PHP
用php的ob_start来生成静态页面的方法分析
2011/03/09 PHP
分享php代码将360浏览器导出的favdb的sqlite数据库文件转换为html
2015/12/09 PHP
PHP sleep()函数, usleep()函数
2016/08/25 PHP
PHP 文件上传后端处理实用技巧方法
2017/01/06 PHP
PHP实现动态添加XML中数据的方法
2018/03/30 PHP
thinkphp5.0整合phpsocketio完整攻略(绕坑)
2018/10/12 PHP
关于laravel后台模板laravel-admin select框的使用详解
2019/10/03 PHP
php字符串函数 str类常见用法示例
2020/05/15 PHP
用JavaScript事件串连执行多个处理过程的方法
2007/03/09 Javascript
用cssText批量修改样式
2009/08/29 Javascript
兼容IE与firefox火狐的回车事件(js与jquery)
2010/10/20 Javascript
Jquery 模拟用户点击超链接或者按钮的方法
2013/10/25 Javascript
js实现连个数字相加而不是拼接的方法
2014/02/23 Javascript
jQuery判断多个input file 都不能为空的例子
2015/06/23 Javascript
angularJS+requireJS实现controller及directive的按需加载示例
2017/02/20 Javascript
jQuery实现字体颜色渐变效果的方法
2017/03/29 jQuery
cocos creator Touch事件应用(触控选择多个子节点的实例)
2017/09/10 Javascript
js全屏事件fullscreenchange 实现全屏、退出全屏操作
2019/09/17 Javascript
在vue项目中利用popstate处理页面返回的操作介绍
2020/08/06 Javascript
Python中使用logging模块打印log日志详解
2015/04/05 Python
python 查找字符串是否存在实例详解
2017/01/20 Python
python list是否包含另一个list所有元素的实例
2018/05/04 Python
使用Python将字符串转换为格式化的日期时间字符串
2019/09/01 Python
Tensorflow 多线程与多进程数据加载实例
2020/02/05 Python
python GUI库图形界面开发之PyQt5树形结构控件QTreeWidget详细使用方法与实例
2020/03/02 Python
HTML5和CSS3让网页设计提升到下一个高度
2009/08/14 HTML / CSS
美国美发品牌:Bumble and Bumble
2016/10/08 全球购物
美国婴童服装市场上的领先品牌:Carter’s
2018/02/08 全球购物
严选全球尖货,立足香港:Bonpont宝盆
2018/07/24 全球购物
医学类个人求职信范文
2014/02/05 职场文书
老总助理工作岗位职责
2014/02/06 职场文书
关于是否需要写商业计划书
2014/02/07 职场文书
伊索寓言读书笔记
2015/06/30 职场文书
校园开放日新闻稿
2015/07/17 职场文书