Yet another bootstrap theme.

2015-06-25
Java 小软摘录

  • Raccoon

    download apk from play store to your pc. check the thread in xda-developers.com.

Read More

2014-08-07
h5ai 中文文件名/目录“乱码”,中文URL 404错误的解决方案

很久之前摘录了一文《h5ai 中文目录及文件均为乱码的更正方法》,距发表该文至今,h5ai已经更新了好几个版本了,目前最新的是0.25.2。刚好最近需要通过局域网以web服务的形式共享一些资料,所以重新回来了解h5ai。而这次终于是解决了曾困惑了我很久的有关中文文件和中文URL处理的问题。 当然,官方默认仍然是不支持,解决这个问题还是要自己手动修改一下源码,方法已在h5ai 官方github 的issue 140《Support non UTF-8 encoded file systems》 中提及,在这里简单分享一下。

让h5ai完美支持中文

仅需修改class-app.php 这个文件就可以解决问题了。 h5ai/server/php/inc/class-app.php 第84行

$encoded_parts[] = rawurlencode($part);

修改为:

$encoded_parts[] = rawurlencode(mb_convert_encoding($part, “UTF-8”, “GBK”));

第95行

return normalize_path(ROOT_PATH . “/“ . rawurldecode($rel_url));

修改为:

return normalize_path(ROOT_PATH . “/“ . mb_convert_encoding(rawurldecode($rel_url), “GBK”, “UTF-8”));

Read More

2014-07-10
利用inotifywait 实时监控文件变化并自动同步至百度云

之前一直利用VPS 手动下载一下zip 的文件再利用百度云网盘的离线下载功能同步至国内网盘,期间还需要检查zip文件的完整性,再区别文件名上传至不同的百度云网盘中,综合起来需要手动处理的流程大概是这样的:

获取zip 文件下载地址 -> ssh 登陆到VPS建立下载任务 -> 不定时检查任务下载进度 -> 下载完成后获取zip 文件属性(预览及md5 校验) -> 登陆1号百度云建立离线任务 -> 登陆2号百度云建立离线任务。

通过linux 的inotify 东拼西凑写了个shell脚本,自动处理后简化任务为:

获取zip 文件下载地址 -> ssh 登陆到VPS 建立下载任务

Read More

2014-06-24
灵活地变动Nginx 的默认文档“index” 值

为什么会有这个需求?还不是因为BA的问题… 接到“内容不符”的通知,要么滚要么大改。运营上线已久,大改不现实,滚到外地的话即浪费资金又不利于国内优秀资源的使用。冒险用上这招,继续低调行事… 得益于linux 平台及强大nginx,还有被Q了的Google,最终才能使方案得以顺利实现。码文记录也顺便分享给有需要的朋友,虽然过分很简单,但真的很有用。对于nginx 的理解仍然是冰山一角!

需求及思路

用户访问www.xxx.com 时,需要展示“符合要求”的内容,而用户入口非www.xxx.com 时则展示“不太符合要求”的内容。 方案一: 这个第一时间想到的,就是新建目录,把现有内容放置在新目录下并绑定二级域名继续使用,而根目录随意放置一个静态文件供展示就可以了。 弊端:工作量相对大了;整站放置在二级目录,不知道会不会影响其他已绑定二级域名的子频道;不利于日后大动作。 方案二: 根据来访域名,动态变换主页。nginx 可以用set 来设置变量,简单!方便!快捷!

方案实施

最终实现预期功能的nginx 这一小段 配置文件如下:

if ($host = ‘www.xxx.com') {
set $index “default.php”;
set $index_more “index.php”;
}
if ($host != ‘www.xxx.com') {
set $index “index.php”;
set $index_more “default.php”;
}
index $index index.htm $index_more;
# index index.html index.htm index.php;

也就是$host 为www.xxx.com 时,index 最优先的默认文档为default.php。当$host 不是www.xxx.com 时,则优先使用原来的index.php! 修改保存后,使用nginx -t测试提示successful。然后通过nginx -s reload重新加载nginx 配置。大功告成!


*这里新增加一个$index_more 的变量(variable)是折衷的办法,当我使用如下判断时,遇到了403 错误:

if ($host = ‘www.xxx.com') {
set $index “default.php index.htm index.php”;
}
if ($host != ‘www.xxx.com') {
set $index “index.php index.htm default.php”;
}
index $index;
# index index.html index.htm index.php;

似乎是因为变量赋值出现空格而导致了403。度娘无解,Google 也不知道怎么描述具体问题,有机会的话,还想去stackoverflow 咨询一下。如果有朋友知晓个中缘由的,希望能分享一下解决方法。

Read More

2014-06-24
利用Discuz checkrobot() 函数给搜索引擎的蜘蛛爬虫启用301重定向

在搜索相关资料时,看到不少朋友拿“跳转”来干“坏事”,例如欺骗友链。因为Discuz 换了默认域名,而www 仅做简单的展示。这次给蜘蛛作301 重定向的目的就是为了提供更好的用户体验,同时也避免因为“主页”做了大规模的变动而导致搜索引擎大K。

Discuz checkrobot() 函数:

checkrobot() 函数已在source/function/function_core.php 中定义

function checkrobot($useragent = ‘’) {
static $kw_spiders = array(‘bot’, ‘crawl’, ‘spider’ ,’slurp’, ‘sohu-search’, ‘lycos’, ‘robozilla’);
static $kw_browsers = array(‘msie’, ‘netscape’, ‘opera’, ‘konqueror’, ‘mozilla’);

$useragent = strtolower(empty($useragent) ? $\_SERVER\['HTTP\_USER_AGENT'\] : $useragent);
if(strpos($useragent, 'http://') === false && dstrpos($useragent, $kw_browsers)) return false;
if(dstrpos($useragent, $kw_spiders)) return true;
return false;

}

判断蜘蛛,启用PHP 301 重定向

新建一个php 页面,引入Discuz 核心类source/class/class_core.php:

发送301 HTTP 状态码后,跳转至新地址http://newdomain.com/。

使用蜘蛛模拟工具查看结果

使用较多的就是Chinaz 的工具了,执行一下蜘蛛模拟访问,发现输出了预期的新地址网页内容,也就是成功了。普通访客即非robot 不会遇到301 重定向。简单地完成任务!

Read More

2014-06-16
RamNode VPS 使用的一些小问题,简单总结一下

使用RamNode 的原因,主要是LEB 上的评价不错,虽然是后起之秀。不知道国内使用RamNode 的产品的朋友多不多,其实开始还是比较趋向linode 的,不过$20/month 似乎有点浪费,而且门槛有点高,虽然刚申请的美国payoneer 信用卡已经审批通过,目前已在途中,加上$30/year 的养卡费用,真的压力山大,希望RamNode 能带来一点好事吧。实在不想折腾了…

RamNode VPS 套餐/配置:

还是没太大把握,月付还是首选。选择了最低配的 RamNode VPS,价钱是:$6.00 USD Monthly!机房是Seattle(西雅图)。

  • 256MB RAM
  • 1 CPU Core Access
  • 5GB SSD Space
  • 1Gbps Port
  • 1000GB Bandwidth
  • 1 IPv4 Address
  • 16 IPv6 Addresses

使用TWOYEAR RamNode优惠码,最后终身折扣为$3.48!

安装操作系统及编译lnmp:

和大多数VPS 一样,自由灵活安装OS 是标配,起初我是直接选用了RamNode 预用的ubuntu 12.04 LTS Desktop(因为本来是想拿来干其他事的,图个方便),结果VNC 提示“No bootable device”,当然启动项是正确的,难道是内存太小?没继续作深入研究,弃之。 再“reinstall” 时选择了CentOS 6.4 minimal!因为不太熟悉CentOS,在编译lnmp 时遇到很多问题,各种包“Not available“、”no package found“?等… 最终回到较为熟悉Debian 7.3。LNMP 的编译是一气呵成- -!。

迁移旧服务器数据:

安装lftp,用lftp 的mirror 参数直接远程拿过来。就是因为数据在国内,而且带宽本来就很小,所以整个过程用了不止24 小时,而且现在还发现有几百兆的数据没同步过来,甚是郁闷,流量去掉了3 个G。

RamNode VPS升级:

西雅图的速度还不错,ping 值电信在200 左右,联通就大了不少。RamNode 的客服也不错,发ticket 很快就有回应,有点像QQ 聊天一样… 既然没什么问题,考虑到256MB / 5G SSD 不太够用,还是升级到512MB / 10G SSD 了。 直接在”My services“ 选择已购产品然后”upgrade“,滑动滑条至512MB 确认配置选择。补上差价,使用RamNode优惠码后大概多了4 美元。还是有点小贵的样子… 通过paypal 付款升级后,等待客服手动更新服务器信息才行。VPS Control Panel 显示的VPS 信息中,内存是马上更新至512MB 的,唯独硬盘信息一项(Disk Spache)仍然是5GB,当时没留心看RamNode 发来的ticket:

KVMs are manually upgraded and you will need to manually re-size your disk to the larger size once we provision the upgraded information for you.

升级后的硬盘根分区是不会立刻跟新至最大值的,需要手动resize。但也不是付款后就能马上执行resize 操作,因为RamNode 还没给你升级完毕呢。耐心收邮件吧,RamNode 发来的升级完成的邮件内容:

Hello Fuying, Your KVM VPS upgrade order has been received and processed. KVM requires a restart of your VPS in order to use your new resources. You have to restart your VPS from the SolusVM control panel specifically. Once you have restarted, you will have to resize your disk partition(s) using the GParted or System Rescue ISOs. If you need us to resize your disk for you, please open a support ticket and allow 24 hours for us to perform the work. We are not responsible for any data loss as a result of partition resizing. If you have any questions or concerns, please open a support ticket. Thanks for your business!

这时,可以执行磁盘的resize 操作,也可以发ticket 给RamNode 让RamNode 给你完成,但不会为你的数据丢失负责。我是自己通过挂载System Rescue 镜像到CDROM,通过VNC 进入root shell,然后用那个startx 启动图形界面,再使用GParted 手动新增分区了并设置开机挂载到/home,并没有直接扩展原来的跟分区(其实,VPS 控制面板是可以直接选用GParted 镜像的)。但,发ticket 咨询RamNode 如果执行VPS 控制面板的重装操作系统操作,会直接清除掉整个磁盘的数据,汗吧!如果真有必要重装系统,还是挂载ISO 镜像到CDROM,再手动安装,安装时别格式化新增分区就好了。这样就可以避免分区数据的丢失! 来自我的ticket:

yeah, thanks ! it works now. another question ? i created a new partition /dev/vda3 and mounted it on /home. if i use the reinstall function over the Contorl Panel, will it erase my whole disk or just the root partition ? Just in case.

RamNode 回复:

It will erase your whole disk, yes.

Read More

2014-05-24
WSS 默认编辑器Kindeditor 配置记录,修正prettyPrint 代码高亮的实现

发表了《WSS 富文本编辑器kindeditor 到ueditor 的替换,并实现代码高亮!》之后,虽然感觉ueditor 确实功能丰富,但为了以后方便WSS 的升级,还是直接在WSS 及Kindeditor 上作小幅度的修正来实现代码高亮。

首先,去掉默认WSS 对Kindeditor 工具栏(items)的定制:

Windows使用notepad++ 通过正则表达式替换。

var editor;
KindEditor.ready(function(K) {
editor = K.create(‘#csa_remark1’, {
width : ‘95%’,
height: ‘350px’,
items:[
‘source’, ‘|’, ‘undo’, ‘redo’, ‘|’, ‘preview’, ‘print’, ‘template’, ‘cut’, ‘copy’, ‘paste’,
‘plainpaste’, ‘wordpaste’, ‘|’, ‘justifyleft’, ‘justifycenter’, ‘justifyright’,
‘justifyfull’, ‘insertorderedlist’, ‘insertunorderedlist’, ‘indent’, ‘outdent’, ‘subscript’,
‘superscript’, ‘clearhtml’, ‘quickformat’, ‘selectall’, ‘|’, ‘fullscreen’, ‘/‘,
‘formatblock’, ‘fontname’, ‘fontsize’, ‘|’, ‘forecolor’, ‘hilitecolor’, ‘bold’,
‘italic’, ‘underline’, ‘strikethrough’, ‘lineheight’, ‘removeformat’, ‘|’, ‘image’,
‘flash’, ‘media’, ‘insertfile’, ‘table’, ‘hr’, ‘map’, ‘code’, ‘pagebreak’, ‘anchor’,
‘link’, ‘unlink’, ‘|’, ‘about’
]
});
});

去掉这一段

items:[
‘source’, ‘|’, ‘undo’, ‘redo’, ‘|’, ‘preview’, ‘print’, ‘template’, ‘cut’, ‘copy’, ‘paste’,
‘plainpaste’, ‘wordpaste’, ‘|’, ‘justifyleft’, ‘justifycenter’, ‘justifyright’,
‘justifyfull’, ‘insertorderedlist’, ‘insertunorderedlist’, ‘indent’, ‘outdent’, ‘subscript’,
‘superscript’, ‘clearhtml’, ‘quickformat’, ‘selectall’, ‘|’, ‘fullscreen’, ‘/‘,
‘formatblock’, ‘fontname’, ‘fontsize’, ‘|’, ‘forecolor’, ‘hilitecolor’, ‘bold’,
‘italic’, ‘underline’, ‘strikethrough’, ‘lineheight’, ‘removeformat’, ‘|’, ‘image’,
‘flash’, ‘media’, ‘insertfile’, ‘table’, ‘hr’, ‘map’, ‘code’, ‘pagebreak’, ‘anchor’,
‘link’, ‘unlink’, ‘|’, ‘about’
]

我使用的正则语句:

搜索

items\:\[.*\}\)\;

替换

\}\)\;\n\}\)\;

顺便参考官方PHP demo 手动在这些文件中加入pretty.css 及prettyPrint{} 以便给编辑器内的pre 标签定义样式。

cssPath : ‘../plugins/code/prettify.css’,

prettyPrint();

涉及的文件较多,自己手动编辑了下面的几个文件:

  • announcement_add.php
  • announcement_edit.php
  • comment_add.php
  • comment_edit.php
  • default_task_add.php
  • default_task_plan.php
  • file_add_folder.php
  • file_edit.php
  • file_edit_folder.php
  • log_add.php
  • log_edit.php
  • project_add.php
  • project_edit.php

Kindeditor 在textarea里设置HTML内容来可实现编辑,需要从服务器端程序(ASP、PHP、ASP.NET等)直接显示内容,所以必须转换HTML特殊字符(>,<,&,”)。

而WSS 在以下的几个文件中没有进行转义,所以需要在textarea 标签中手动加入PHP htmlspecialchars() 函数

  • file_edit.php
  • file_edit_folder.php
  • log_edit.php
  • default_task_plan.php

如default_task_plan.php 文件:

<?php echo $row_Recordset_task[‘csa_remark1’]; ?>

加上htmlspecialchars() 函数后

<?php echo htmlspecialchars($row_Recordset_task[‘csa_remark1’]); ?>

完成编辑器的编辑后,就到了前端内容显示的修正了

为了方便,在WSS 的头部head.php 加入prettyPrint 样式:

再在foot.php 最后加入相关jsprettyPrint() 函数:

prettyPrint();

PS:其中log_view.php 是作为frame 加载的,所以还需在这个文件单独加入上面的css 及js prettyPrint{}

最后,简单“美化”一下显示效果

相关文件包括:

  • skin/themes/base/lhgdialog.css

    /********calendar*******/

    img {border: none;}
    li {list-style: none;}

    去掉li list-style 的定义:

    /********calendar*******/

    img {border: none;}
    /*li {list-style: none;}*/

    并为定义了日历样式的.day_main 加上宽度

    .day_main{height:105px; width:105px; overflow:hidden; }

  • skin/themes/base/tk_style.css

    /* CSS Document */

    img {border: none;}
    ul{list-style: none; padding: 0; }
    li{list-style: none; }

    去掉list-style 的定义:

    /* CSS Document */

    img {border: none;}
    /*ul{list-style: none; padding: 0; }*/
    /*li{list-style: none; }*/
    ul{padding: 0; }

  • editor/plugins/code/pretty.css

    改为自动换行:

    pre.prettyprint {white-space: pre-wrap;}

Read More

2014-05-24
WSS 富文本编辑器kindeditor 到ueditor 的替换,并实现代码高亮!

因为需要,wss 默认的kindeditor 似乎不太“够”用,所以转投百度开源的富文本编辑器ueditor。特编文以记录各个文件的编辑过程!wss 的版本是1.3.2。

  1. 编辑内容展示 首先,按照官方文档的编辑内容展示 部分,需要使用uparse 在展示页面中对ueditor的产出的编辑数据,进行解析和转换,以呈现不同的效果。
//uParse的语法
//uParse(cssSelector,\[options\])

在wss 根目录的head.php 文件head 部分加入javascript:

 uParse('#content_detail', {
    rootPath: 'editor/'
}) 
  1. 以“文档” 部分为例

    • file_edit.php

      根据百度官方的demo,需要在调用编辑器的页面载入ueditor 的几个关键文件并实例化:

        这里写你的初始化内容 





        var ue = UE.getEditor('container'); 

    在wss 上的处理:

    *   找到

         var editor;
                KindEditor.ready(function(K) {
                        editor = K.create('#tk\_doc\_description', {
                    width : '96%',
                    height: '500px',
                    items:\[
                'source', '|', 'undo', 'redo', '|', 'preview', 'print', 'template', 'cut', 'copy', 'paste',
                'plainpaste', 'wordpaste', '|', 'justifyleft', 'justifycenter', 'justifyright',
                'justifyfull', 'insertorderedlist', 'insertunorderedlist', 'indent', 'outdent', 'subscript',
                'superscript', 'clearhtml', 'quickformat', 'selectall', '|', 'fullscreen', '/',
                'formatblock', 'fontname', 'fontsize', '|', 'forecolor', 'hilitecolor', 'bold',
                'italic', 'underline', 'strikethrough', 'lineheight', 'removeformat', '|', 'image',
                'flash', 'media', 'insertfile', 'table', 'hr', 'map', 'code', 'pagebreak', 'anchor', 
                'link', 'unlink', '|', 'about'
        \]
        });
                }); 

        替换为:

         var ue = UE.getEditor('tk\_doc\_description'); 

    *   找到:

        <?php echo $row\_Recordset1\['tk\_doc_description'\]; ?>

        替换为:

        <?php echo $row\_Recordset1\['tk\_doc_description'\]; ?>

        PS:采用了script标签作为编辑器容器对象,并设置了其类型是纯文本,从而在避免了标签内部JS代码执行的同时解决了部分同学在使用传统的textarea标签作为容器所带来的一次额外转码问题。

*   file_view.php

    加入uparse 解析转义的cssSelector

    找到

         null) { ?>



    替换为

         null) { ?>



    也就是加入了div
Read More

2014-05-21
Windows 7: 给程序快捷方式提权以管理员身份运行,跳过UAC 提示(类似白名单)的方法!

信息

本文将会向你展示如何利用Task Scheduler为已经安装的应用程序创建一个提权的“以管理员身份运行”快捷方式,这样在你的VistaWindows 7Windows 8 上电脑开启了UAC 的情况下运行该程序就不会出现UAC 权限提示了。
在这个演示中,你将会创建一个新的任务,还有一个新的快捷方式去运行这个任务。另外,也包含如何改变这个快捷方式的图标的方法。

注意

这个方法并非本人原创,分享仅供参考。

警告

  • 这个快捷方式及任务只可以在拥有管理员身份的用户登陆后创建并工作。
  • 这个快捷方式不会在一个以标准用户登陆的环境中工作。

教程开始:

  1. 按下Windows + R 键打开运行对话框。输入taskschd.msc,然后回车。 PS: 这个将会打开 任务计划程序。这个文件位于: C:\Windows\system32\taskschd.msc。
  2. 在左边的面板中选中任务计划程序库,然后在后边面板中点击创建任务(看下面截图)

    打开任务计划程序

  3. 常规标签下,输入你要为这个程序创建快捷方式的“名称”。(看下面截图) PS:_这个将会是任务名。举个例,我用CCleaner作为目标程序。记下这个名称,等一下你会用到。

    创建任务

    _

  4. 选中下面的使用最高权限运行(看下面截图)

    勾选使用最高权限运行

  5. 点击打开下面的配置下拉框,选择 Windows® 7, Windows Server™ 2008 R2 或者你正在使用的Windows 版本。(截图) PS:这个有点像兼容模式。如果这个程序不支持在Windows 7 下正常运行,那么你就需要选择可以较好兼容这个程序正常运行的操作系统来代替Windows 7。

    配置

  6. 点击选择操作选项卡,然后点击新建按钮。(截图)

    操作-新建

  7. 程序或脚本中复制并粘贴下面的路径。(看第9步截图)

    %windir%\System32\cmd.exe

  8. 添加参数(可选)编辑框中输入下面的变量。(看第9步截图) PS:用你在第3步创建的任务名称(ex: CCleaner)代替下面变量的任务名,然后用程序 .exe 文件所在的真实完整路径替换下面变量的完整的程序路径

    /c start “任务名” “完整的程序路径”

    例如:

    /c start “CCleaner” “D:\Program Files\CCleaner\CCleaner.exe”

  9. 点击OK。(截图)

    新建操作

  10. 选中条件选项卡。首先取消勾选如果计算机改用电池电源,则停止,然后再取消勾选只有在计算机使用交流电源时才启动此任务。(截图) PS:这个步骤主要针对笔记本等便携本子,这样你才能在你的本子处于省电模式运行时仍能继续正常执行该程序。

    新建操作完成

    条件

  11. 点击OK。 (查看上面截图)

  12. 你将会看到你刚才新建的任务,名称就是你在第3步输入的内容(ex: CCleaner)。这时可以关闭任务计划程序窗口了。

    任务创建完成

  13. 在你桌面空白的地方右击,选择新建快捷方式

  14. 在下面键入对象的位置, 然后点击下一步按钮。(截图) PS: 用你在第3步创建的任务名称替换下面的任务名

    schtasks /run /tn “任务名”

    例如:针对我在第3步创建的任务名CCleaner,我应该这样输入:

    schtasks /run /tn “CCleaner”

    创建快捷方式

  15. 输入你喜欢的快捷方式的名字(ex: CCleaner),然后点击完成按钮。(截图)

    快捷方式的名字

  16. 在桌面右击这个新的快捷方式(ex: CCleaner),然后选择属性

  17. 快捷方式选项卡中,点击更改图标按钮。(截图)

    更改快捷方式图标

  18. 弹出对话框直接点击确定。(截图)

    更改快捷方式图标-OK

  19. 点击浏览按钮。(截图)

    浏览快捷方式图标

  20. 找到你创建的快捷方式的主程序 .exe 文件所在的位置,选择并打开它。(截图) PS:如果你有其它图标,也可以选择其它的来代替。

    快捷方式主程序路径

  21. 选择你用来作为这个快捷方式的图标,然后确定。(截图)

    确定快捷方式图标

  22. 点击确定。(截图)

    完成确定快捷方式图标

  23. 现在你可以将这个提了权的快捷方式放到你的“启动”文件夹里作为一个任务来开机启动,或者附加到开始菜单,锁定到任务栏,键盘快捷键调用,或者移动到任何你方便你使用的地方:)

    提示

    如果你想在使用这个快捷方式时禁止快速闪出 CMD 窗口(不好描述- -),你可以按下面的方法操作。

    • 右键快捷方式,选择 属性
    • 点击 快捷方式选项卡。
      运行方式的下拉选择项中* 选择最小化,然后点击确定
  24. 当你运行这个已提权的快捷方式时,你将不再需要在弹出的UAC 对话框中点击来同意以管理员身份运行啦。巨方便!

Tip

取消并删除这个任务:

  • 选中 任务计划程序库,在右边的面板中选中你在第12步创建的任务并右击,然后点击删除再确定即可。
  • 删除创建的快捷方式。
Read More

2014-05-13
自定义Openshift Apache/PHP/Mysql 的时区(TIMEZONE),修改区域为"Asia/Shanghai" '+08:00'

有趣的是,OpenShift 某些cartridge 的配置文件是可以自定义的,如php.ini 、my.cnf,但是自定义的配置在应用重启后就会丢失,这样也是为了保证应用的稳定吧。但针对个人开发需要,需要变更某些参数时就麻烦了。 这一次遇到的问题是与系统时间有关的,OpenShift 默认时区是GMT,不使用我们大陆用户使用的东8 时区,所以需要修改TIMEZONE 来迎合个人使用需要。我的一个应用(appname)使用的Cartridge 有PHP5、Mysql-5.5、phpMyadmin。这次要定义Apache、PHP及Mysql 的TIMEZONE值。 Apache / PHP: 1) 在php 应用更目录(Documentroot)添加.htaccess 文件,有的话就直接在原基础上修改就可以了。加入定义内容:

SetEnv TZ Asia/Shanghai
php_value date.timezone Asia/Shanghai

2) 重启应用:

ctl_all restart

3) 查看phpinfo :

Apache Environment 段相关值如下

TZ

Asia/Shanghai

date 段

date/time support

enabled

“Olson” Timezone Database Version

0.system

Timezone Database

internal

Default timezone

Asia/Shanghai

Directive

Local Value

Master Value

date.default_latitude

31.7667

31.7667

date.default_longitude

35.2333

35.2333

date.sunrise_zenith

90.583333

90.583333

date.sunset_zenith

90.583333

90.583333

date.timezone

Asia/Shanghai

GMT

定义Mysql 的TIMEZONE: OpenShift 的mysql 配置文件位于~/mysql-5.1/conf/my.cnf,直接修改这个文件后,修改过的内容同样会在mysql cartridge 重启后丢失。 既然无法通过修改my.cnf 文件添加default-time-zone=timezone(default-time-zone=’+08:00’)来定义时区,那只能另外想办法了。 幸好,OpenShift 考虑得非常周到,可以通过rhc 客户端工具自定义环境变量来设置Mysql 时区!这个环境变量是:

OPENSHIFT_MYSQL_TIMEZONE

那么通过rhc 来定义变量OPENSHIFT_MYSQL_TIMEZONE 的值: 1)

rhc set-env -a a OPENSHIFT_MYSQL_TIMEZONE=’+08:00’ -a appname

2) 重启mysql cartridge 及app

rhc cartridge mysql-5.5 -a date
rhc app start appname

3) 检查变量值

rhc ssh appname –gear ‘env | grep TIMEZONE | grep -v grep’

输出:

OPENSHIFT_MYSQL_TIMEZONE=+08:00

也可以通过查看phpinfo.php 页面检查变量值:

OPENSHIFT_MYSQL_TIMEZONE

+08:00


题外话,如果你的程序遇到500 等其他错误需要查看php 错误信息来调试应用,可以通过一下方法临时变更php 的display_erros 及error_reporting 的值:

Read More