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 相关文章推荐
PHP与SQL注入攻击[三]
Apr 17 PHP
php pack与unpack 摸板字符字符含义
Oct 29 PHP
php simplexmlElement操作xml的命名空间实现代码
Jan 04 PHP
yii框架源码分析之创建controller代码
Jun 28 PHP
使用ThinkPHP自带的Http类下载远程图片到本地的实现代码
Aug 02 PHP
php四种基础算法代码实例
Oct 29 PHP
php+xml结合Ajax实现点赞功能完整实例
Jan 30 PHP
php使用crypt()函数进行加密
Jun 08 PHP
使用YII2框架实现微信公众号中表单提交功能
Sep 04 PHP
PHP中define() 与 const定义常量的区别详解
Jun 25 PHP
Laravel6.0.4中将添加计划任务事件的方法步骤
Oct 15 PHP
PHP过滤器 filter_has_var() 函数用法实例分析
Apr 23 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 var_dump()函数的详解
2013/06/05 PHP
PHP addAttribute()函数讲解
2019/02/03 PHP
javascript下function声明一些小结
2007/12/28 Javascript
Javascript 八进制转义字符(8进制)
2011/04/08 Javascript
jquery异步跨域访问代码
2013/06/28 Javascript
jquery Validation表单验证使用详解
2020/09/12 Javascript
jQuery实现仿腾讯视频列表分页效果的方法
2015/08/07 Javascript
jQuery移动页面开发中的触摸事件与虚拟鼠标事件简介
2015/12/03 Javascript
JQuery 设置checkbox值二次无效的解决方法
2016/07/22 Javascript
JQuery实现文字无缝滚动效果示例代码(Marquee插件)
2017/03/07 Javascript
Vue 进阶教程之v-model详解
2017/05/06 Javascript
JS实现的简单标签点击切换功能示例
2017/09/21 Javascript
详解为生产环境编译Angular2应用的方法
2018/12/10 Javascript
Vue实现浏览器打印功能的代码
2020/04/17 Javascript
vue操作dom元素的3种方法示例
2020/09/20 Javascript
antdesign-vue结合sortablejs实现两个table相互拖拽排序功能
2021/01/08 Vue.js
[02:51]DOTA2 Supermajor小组分组对阵抽签仪式
2018/06/01 DOTA
在Windows系统上搭建Nginx+Python+MySQL环境的教程
2015/12/25 Python
numpy中索引和切片详解
2017/12/15 Python
Python线程障碍对象Barrier原理详解
2019/12/02 Python
pytorch::Dataloader中的迭代器和生成器应用详解
2020/01/03 Python
Python API len函数操作过程解析
2020/03/05 Python
python爬虫实现获取下一页代码
2020/03/13 Python
Python基础教程之输入输出和运算符
2020/07/26 Python
New Balance比利时官方网站:购买鞋子和服装
2021/01/15 全球购物
Java程序员常见面试题
2015/07/16 面试题
物流仓管员工作职责
2014/01/06 职场文书
工作经常出错的检讨书
2014/09/13 职场文书
反四风个人对照检查材料
2014/09/26 职场文书
Ajax常用封装库——Axios的使用
2021/05/08 Javascript
Html5生成验证码的示例代码
2021/05/10 Javascript
用python实现监控视频人数统计
2021/05/21 Python
15个值得收藏的JavaScript函数
2021/09/15 Javascript
MySQL之select、distinct、limit的使用
2021/11/11 MySQL
java开发双人五子棋游戏
2022/05/06 Java/Android
python语言中pandas字符串分割str.split()函数
2022/08/05 Python