無標題文檔

有关 PHP 和 MySQL 时区的一点总结

由于暂时使用国外的空间,在我发布 Blog 的时候发现时间总是不对。依据我以前编写程序的经验,这是时区的问题。这个问题解决起来并不难,写下我的解决途径以便日后参考。

PHP 脚本端的市区设置可以在 php.ini 下设置 date.timezone 键的值为 'Asia/Shanghai' 即可。但是通常共享虚拟主机本身没有修改 php.ini 权限。这个时候就应该在程序公共部分加入

ini_set('date.timezone','Asia/Shanghai');

动态修改 php.ini 的设置。之后可以测试一下时间是否正确:

var_dump(date());

如果服务器的本地时间是正确的,那么一般就能解决问题了。附,PHP 5.1 以上提供了专门的函数修改对应的时区:

date_default_timezone_set('Asia/Shanghai');

建议使用此函数,因为更通用一些。对应 'Asia/Shanghai' 其他可以使用的大陆时区还有:Asia/Chongqing 、Asia/Shanghai 、Asia/Urumqi (依次为重庆,上海,乌鲁木齐);港台地区可用:Asia/Macao、Asia/Hong_Kong、Asia/Taipei(依次为澳门,香港,台北);还有新加坡:Asia/Singapore;其他可用的值是:Etc/GMT-8、Singapore、Hongkong、PRC;老外好像把北京漏调了。

但是,在我修改成功 PHP 端的时区以后发现日期并没有正确的记录下来。这个时候我考虑是否是数据库的问题。果不其然,因为程序插入的函数并没有调用 PHP 的时间,而是直接使用 MySQL 的 CURRECT_TIMESTAMP。这个时候就要考虑是否能修改 MySQL 方面的时区。

参考了 MySQL 的文档,发现一个可行的 SQL 语句为:

SET GLOBAL time_zone = '+8:00'; 

其中 '+8:00' 是东八区的表示方法,其他的市区依次类推。而我在数据库模型中插入改语句发现权限不够(该死的虚拟主机提供商)。接下来我调试了很多语句,比如:

DATE_ADD(UTC_TIMESTAMP(), INTERVAL 8 HOUR);

显示时区的 SQL 语句:

SHOW VARIABLES LIKE 'system_time_zone'

等等。而由于 MySQL 权限的限制并没有彻底的解决方案。我 Google 了下,发现老外这个有 一个非常好的解决方案 。但是他需要修改每条插入数据的 SQL 语句。这样的方案并不是非常的有效,一旦数据库时区改成正常,那么相应的 SQL 语句又要改回来。

而我考虑既然 PHP 端已经可以正确的解决时间的问题了。MySQL 数据库方面虽然可以使用相应的函数解决,但是如果日后迁移到别的主机环境又要改回来。而相应的字段是一个 TIMESTAMP 类型的,默认的值为 CURRECT_TIMESTAMP,当然是可以指定时间的。

那么我的做法就是让 PHP 插入当前正确的时间,这样虽然程序方面需要做相应的修改。不过日后配置修改起来只要修改一处就可以了。最后插入数据库的时间注意一下格式:

date('Y-m-d H:i:s')

这样就可以解决问题了。附,一些非常好的参考资料:

  1. http://www.modwest.com/help/kb6-256.html
  2. http://topic.csdn.net/t/20060503/07/4728521.html
  3. http://www.phpchina.com/5173/viewspace_5132.html
  4. http://www.phpx.com/pth110355.php

更新:由此 wiLdGoose 兄说他也碰到同样的问题,但是无法解决。结果经过种种的假设和判断以后,到最后发现原来是 Zend Studio 的时区配置问题(我狂汗ing)。看来除去运行环境,开发环境也是需要注意以下的。

无聊会议中的涂鸦

有时候技术人员就是怕开会,毕竟有些东西我们是不关心的。但由于「种种」的原因我们不得不参加这样的会议。而在「浪费」无聊人生的同时我们伟大的技术人员就会做些「无聊的事情」,比如在会议上随手涂鸦。我 「有幸」参加了这样的会议,于是乎我就做出了些和公司「不兼容、不和×谐」的举动。

https://friable.rocks/_/2007_11_16/1195209773.jpg

咳咳,这个是无敌猪!它身披铠甲,手持作战武器,HP 为惊人的 1e10(这辈子都不用喝红了)。但是它唯一的遗憾就是没有头发。

https://friable.rocks/_/2007_11_16/1195209923.jpg

下面出场的是无敌猪永远的对手 -- 金刚猫。别看它弱小的身体,但是它尾巴上的蝴蝶结已经出卖了它。它那间不可摧的牙齿似乎能咬掉一切东西(沙丁鱼罐头、肉末粉丝、蟹糊酱等)。

https://friable.rocks/_/2007_11_16/1195209429.jpg

谁说开会的时候就不能泡妞了?!下面是两只栗子的爱情故事。他们在一个阳光明媚的早晨,迎着乌鸦的叫声(淫×叫?!)。栗子哥哥终于按耐不住心中澎湃的心绪拖着一朵小花(竞猜时间:到底栗子哥哥拿的是什么花呢?猜中将本人初吻一个),向栗子妹妹表白。

https://friable.rocks/_/2007_11_16/1195209446.jpg

上面是放大的版本,但愿栗子哥哥能成功!有关后续,Gracecode.com 会陆续报道请持续关注本 Blog!最后,在议会上涂鸦是非常不道德的行为,它破坏了公司的纪律、公司的发展以及公司对你的期望。请各位看官切勿模仿,否则被自己伟大、纯真、善良的主管看见了后果不堪设想。

附,上述涂鸦大图 打包下载

截图有时候能勾起些回忆

今天周末,我把我的移动硬盘带到公司来打算整理下我的文件。无意间当整理我的图片目录的时候发现「尘封」已久的一些系统截图。

这些可以说都是我使用计算机的见证。由于截图众多,我精选了其中的几张有趣的,和大家分享一下。

https://friable.rocks/_/2007_11_10/1194688388.gif

首先是控制台。谁说 Linux 的控制台是黑底白字非常死板的?有了 Bootsplash ,在控制台上可以任意的加上彩色的背景。

https://friable.rocks/_/2007_11_10/1194688347.gif

看来上面的这张图相信大家知道我为什么取名叫 feelinglucky -「手气不错」了吧。是的,当时我运气不错,因为我的老机(MMX 166)由于硬件老旧,所以内核一下子就找到了。我记得当时同寝室的哥们被我气得半死,呵呵。

https://friable.rocks/_/2007_11_10/1194688414.gif

Linux 下我还是喜欢使用 VIM 编写程序,这已经成为我的信仰了(请允许我这样说)。可能你会看见控制台的字体非常奇怪。在 Slackware Linux 下,编辑 /etc/rc.d/rc.fonts 就可以在 Framebuffer 控制台下显示自己想要的字体了。

https://friable.rocks/_/2007_11_10/1194688426.gif

对于中文的支持内核级别的当然是使用 UNICON 了,这个是 TurboLinux 的一个项目。已经很久没有关注这个项目来,自工作了以后我发现我很少「折腾」 Linux 了。我还依稀的记得为了同时打上 UNICON 和 Bootsplash 补丁我 Hack 了不少的时间(当时的 Linux 版本号我记得是 2.4.22)。

https://friable.rocks/_/2007_11_10/1194688442.gif

相信大家还是喜欢 GUI 界面吧,上面这张是 Fvwm 窗口管理器 的截图。我开了一个 xclock 用来显示当前时间,还有一个系统监视工具(名字我一时给忘记了)。界面虽然简单,但是我绑定了很多的快捷键,所以非常好用。

https://friable.rocks/_/2007_11_10/1194688459.gif

工作和娱乐是两不误的。 XMMS 可以说就是我 Linux 下的 Winamp。至于 VIM,它走到哪里都可以用,哪怕是在火星。这图中还有一个叫 MRXVT 的控制台终端,看得出它的亮点就是多标签页吧。

https://friable.rocks/_/2007_11_10/1194688476.gif

除了 FVWM 以外,我偶尔也会使用一下 WindowMaker ,不过这仅仅是换换胃口。截图上显示除了该死的 VIM 外还有几个 DockApp ,开启了一个终端用 MUTT 收信。还有一个 GIMP ,不过版本比较老了,这个是 GTK+ 版本的(起码是两年前的了)。

https://friable.rocks/_/2007_11_10/1194688494.gif

*ix 下可以用 Wine 模拟 Windows 应用程序,也可以用 VMWare 模拟一个虚拟机装一个 Windows 系统。上面的这张就比较有意思了,我是用了一个 DOSBox 模拟 TurboC 2.0 (相信学 C 语言的同学都不陌生)。

https://friable.rocks/_/2007_11_10/1194688508.jpg

生命有时候就在于「折腾」。我很庆幸大学四年的时光能学到很多的东西,在这里我要感谢那台早已淘汰的 MMX 166 笔记本。详细信息兄弟们可以 到这里看看

使用 OpenDNS 防止 DNS 劫持

时候我们的 ISP 时不时地会在 DNS 上搞一些小动作,更有甚者甚至会搞 DNS 劫持。上个月的时候据说有 大面积的网站指向到了百度 。这是非常 具有中国 Characteristic 的

有是否我们会用 Tor 跳墙访问一些别屏蔽的网站,但是这样的访问速度实在是不敢恭维。最好的办法就是不要使用 ISP 提供给我们的 DNS 服务器。在这方面有一个很好的选择就是 OpenDNS 。OpenDNS 是一个提供免费 DNS 服务的网站,口号是更安全、更快速、更智能。

至于如何使用 OpenDNS 的方法非常的简单,只要在你的接入链接属性中的 TCP/IP 属性的 DNS 选项改成 208.67.222.222 或者是 208.67.220.220 即可,如下图所示:

https://friable.rocks/_/2007_11_10/1194632793.gif

注:发布此文也是因为前段时间有部分兄弟(这里要感谢 IPFox 兄弟)报告网站显示 「Hello, world! 」所致。我查询发现是 DNS 莫名其妙的指向了不正确的 IP,遂发此文。

让我们一起忽悠 Spam 机器人吧

很多人的 Blog 都被 Spam 机器人骚扰,有的甚至已经到了无法容忍的地步。这是一种不幸,同时也是一种荣幸。不幸的是那些无聊的 Spam 尽是发一些广告消息,而荣幸的是它给我们带来了流量。

很庆幸我的 Gracecode.com 的流量还不足够引起 Spam 机器人的重视。但是防患于未然,毕竟不是每个 Blog 都是喜欢垃圾评论的。下面根据我看到的、学到的结合我自己的经验在不影响用户体验的前提下说说防止 Spam 的「小窍门」。

别和我谈论如何美化验证码图片,因为我想网站访问者和我本人都不喜欢那些图片的。

防止 Spam 垃圾评论

Spam 其实是很傻的,傻到它似乎无法去辨认 Javascript 和 CSS。防止它们我们只要在 from 中加入一个空的 textarea 就可以了。然后运用 Javascript 和 CSS 将这个 textarea 设置为隐藏就可以了(现在主流的浏览器都支持 CSS 和 Javascript)。

然后我们在服务器端测试这个 textarea 是否有输入,如果有输入那么就十有八九是 Spam 机器人。因为普通「人类」访问并提交这个 from 的时候他是无法看见这个 textarea 的。

防止 Trackback Spam

有时候道理一点就通。那么类似于 Trackback 这样的外部可写操作就非常的简单实现防止 Spam 了。比如我们设定一个 Trackback 的链接地址的 HTML 代码如下:

<a href="http://www.gracecode.com/trackback/blackhole" 
    id="trackback_id">Trackback</a>

然后根据当前的文章内容(比如 ID 等)运用 Javascript 将这个 trackback_id 的 href 值修改成正常的 Trackback 的地址就可以了。让 Trackback Spam 掉入无尽的黑洞里面吧!

总结

上面只是一点的「小窍门」而已,非到万不得已千万不要让用户输入那些该死的验证码。我个人认为这样在麻烦用户的同时,同时也麻烦了自己(很多人在花心思思考如何将自己验证码做得美观)。

最后,让我们一起对付 Spam 机器人吧,包括 Gracecode.com 在内的广大 Blogger 不怕你!

我的照片

嗨!我叫「明城」,八零后、码农、宁波佬,现居杭州。除了这里,同时也欢迎您关注我的 GitHubTwitterInstagram 等。

这个 Blog 原先的名字叫 Gracecode.com 、现在叫 「無標題文檔」 。 其实无所谓叫什么名字,作为码农知道取名是件很难的事情。最后想到的这个名字,其实都没啥特别的含义,系统默认的文件名而已。

作为八零后,自认为还仅存点傲娇式的幽默感,以及对平淡生活的追求和向往。 为了免得对号入座和不必要的麻烦,声明本站点所持观点仅代表个人意见,不代表自己所服务公司的立场。

如果您想联系我,可以发我邮件 `echo bWluZ2NoZW5nQGdyYWNlY29kZS5jb20K | base64 -d`

文章

项目