没有比人更高的山

在Windows上安装PHP模板引擎Smarty1

安装Smarty

下载页面:http://www.smarty.net/download.php,下载Latest Stable Release,我选择的版本是2.6.26

解压到D:\php\smarty\,这个是我的安装路径,可以根据自己的需要更改,但是注意以下有这个路径的都需要修改

配置Smarty

修改PHP安装目录下的php.ini,找到如下两行所在的位置:

1
2
; Windows: "\path1;\path2"
;include_path = ".;c:\php\includes"

修改为:

1
2
; Windows: "\path1;\path2"
include_path = ".;D:\php\smarty\libs"

重启Apache或者IIS

在你的网站目录(我网站的路径为D:/php/workspace/happylink,你同样需要根据实际情况修改)下新建两个文件夹
D:/php/workspace/happylink/smarty/templates
D:/php/workspace/happylink/smarty/configs

在smarty的安装目录(即d:/php/smarty)下新建两个文件夹:
d:/php/smarty/templdates_c
d:/php/smarty/cache

在网站目录(即D:/php/workspace/happylink)下创建index.php,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
< ?php
// load Smarty library
require('Smarty.class.php');
 
// change the following 2 lines
define('WEB_ROOT', 'D:/php/workspace/happylink');
define('SMARTY_ROOT', 'D:/php/smarty');
 
$smarty = new Smarty;
$smarty->template_dir = WEB_ROOT.'/smarty/templates';
$smarty->config_dir = WEB_ROOT.'/smarty/config';
$smarty->cache_dir = SMARTY_ROOT.'/cache';
$smarty->compile_dir = SMARTY_ROOT.'/templates_c';
 
$smarty->assign('name','fish boy!');
$smarty->display('index.tpl');
?>

在D:/php/workspace/happylink/smarty/templates目录下建立index.tpl,代码如下:

1
2
3
4
5
<html>
    <body>
    Hello, {$name}!
    </body>
</html>

访问http://localhost/happy/index.php,即可以看到显示了“Hello, fish boy!! ”的页面,到目前为止smarty就安装和配置好了。

如果出现如下的警告信息:

Warning: strftime() [function.strftime]: It is not safe to rely on the system's timezone settings. You are
*required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used
any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier.
We selected 'UTC' for '8.0/no DST' instead in D:\php\smarty\libs\Smarty_Compiler.class.php on line 400

第一种解决办法是修改php.ini,把"date.timezone="取消注释(即把前面的分号去掉)并赋值为PRC,保存后重启Apache或者IIS就行了。

第二种是在index.php的开头添加设置默认时区的代码即可:
1
2
3
< ?php
date_default_timezone_set("PRC");
?>
VN:F [1.7.5_995]
Rating: 8.5/10 (2 votes cast)
VN:F [1.7.5_995]
Rating: -1 (from 1 vote)

MySQL中drop user if exists功能的实现方法0

在编写可以重复执行的创建数据库的脚本时,我们知道下面语句可以测试数据库是否存在,如果存在的话就删除掉

1
DROP DATABASE IF EXISTS testdb;

但是我们没办法测试用户是否存在,MySQL是没有drop user if exist这样的功能的。详见:http://bugs.mysql.com/bug.php?id=19166

不过有另外一种变通的办法可以实现同样的功能,代码如下:

1
2
3
4
# a way to implement the functionality of 'drop user if exists' which mysql does
# not support for now
GRANT usage ON *.* TO testdb IDENTIFIED BY 'testdb';
DROP user testdb;

在执行grant的时候,如果数据库中不存在这个用户,那么MySQL会创建一个用户,并且赋以usage权限,usage权限等同于“no privileges”,至于为什么会有这个特殊的权限请见http://dev.mysql.com/doc/refman/5.0/en/privileges-provided.html#priv_usage,主要是在修改已有用户的grant option时使用的。

另外,使用MySQL5.0.0时,执行drop user时并不会删除其权限。MySQL5.0.2已经修正了这个问题,删除用户的时候会一并连权限以前删除。详见:http://dev.mysql.com/doc/refman/5.0/en/drop-user.html

VN:F [1.7.5_995]
Rating: 0.0/10 (0 votes cast)
VN:F [1.7.5_995]
Rating: -1 (from 1 vote)

Java反编译工具Jad详解1

做项目过程中需要反编译一个jar包,于是作了一些学习,记录下来。

Jad(JAva Decompiler)是一个Java的反编译器,可以通过命令行把Java的class文件反编译成源代码。

如果你在使用编写代码的时候遇到找不到源代码的第三方库,而且你又需要看看这个库的具体实现,那么你就需要使用这个东西。而且如果你是使用Eclipse的话,还有一个Eclipse插件JadClipseJadClipse提供一个class文件查看器可以直接打开class文件查看其反编译后的源代码, 太方便了,太方便了!

不过,可惜的是这个开源项目似乎已经关闭了,官方网站已经上不去了,有个叫Tomas Varaneckas的好心人收集了所有的版本提供给大家下载:JAD Java Decompiler Download

而且这个最新的版本也只支持Java 4,不支持Java 5。还有一个叫做JD-Core的工具支持Java 5的新特性,如enum等,而且它提供独立的GUI程序JD-GUI和基于Eclipse的插件JD-Eclipse,也很方便。但是对于JD-Core,作者没有提供下载的链接,他说“Open the sources of JD-Core is not on my roadmap: I spent too many time on this project.”当然后面也有一大篇文章是别人用来骂他的,可以看Add JD-Core to the download list,蛮有意思。

我的项目中需要将第三方库反编译出来,让后对其进行修改,然后再编译,不仅仅是查看,因此只能用命令行的Jad来做。

使用方法:

[1] 反编译一个class文件:jad example.class,会生成example.jad,用文本编辑器打开就是java源代码

[2] 指定生成源代码的后缀名:jad -sjava example.class,生成example.java

[3] 改变生成的源代码的名称,可以先使用-p将反编译后的源代码输出到控制台窗口,然后使用重定向,输出到文件:jad -p example.class > myexample.java

[4] 把源代码文件输出到指定的目录:jad -dnewdir -sjava example.class,在newdir目录下生成example.java

[5] 把packages目录下的class文件全部反编译:jad -sjava packages/*.class

[6] 把packages目录以及子目录下的文件全部反编译:jad -sjava packages/**/*.class,不过你仍然会发现所有的源代码文件被放到了同一个文件中,没有按照class文件的包路径建立起路径

[7] 把packages目录以及子目录下的文件全部反编译并建立和java包一致的文件夹路径,可以使用-r命令:jad -r -sjava packages/**/*.class

[8] 当重复使用命令反编译时,Jad会提示“whether you want to overwrite it or not”,使用-o可以强制覆盖旧文件

[9] 还有其他的参数可以设置生成的源代码的格式,可以输入jad命令查看帮助,这里有个人做了简单的翻译:jad命令总结

[10] 当然,你会发现有些源文件头部有些注释信息,不用找了,jad没有参数可以去掉它,用别的办法吧。

最后,jad不能直接反编译jar包,直接解压了再反编译吧(这个方法很显然,我实在不好意思写出来)。

VN:F [1.7.5_995]
Rating: 0.0/10 (0 votes cast)
VN:F [1.7.5_995]
Rating: -1 (from 3 votes)

Wordpress旗下的bbPress内网与外网访问设置1

有很多WordPress使用者都想有个能和WordPress很好整合的论坛系统,现在有了bbPress,大家可以少折腾了。

作为一款轻量级的论坛程序,bbPress之前一直默默发展,几乎没有任何推广,而且使用范围和使用人数都比较少,但进入2010年一来,WordPress官方逐渐加大对bbPress的投入。

bbPress安装详细教程

OPhone俱乐部社区 是我在Dian团队的服务器上使用bbPress架设的一个小型论坛。因为服务器在网关内部,而且由于某些原因没有设置成内网也可以用域名访问,如服务器是192.168.0.3,在内网我们就用这个IP了,但外网就必须用域名。

在配置WordPress的时候也会出现,配置好了内网,外网访问不了,这个问题oo同学已经很好的解决了《wordpress内网与外网同时访问的问题》,我是google出来的,在此先恭喜oo同学。

我也尝试用同样的方法配置bbPress,结果发现不行,因为bbPress设计的时候可能还是有些不合理。最终我找到一个不能称其为方法的方法:

[1]打开bbPress安装目录下的bb-includes\functions.bb-meta.php文件
[2]找到函数bb_get_option_from_db的定义
[3]在return前增加一下代码:

1
2
3
4
5
6
7
    if($option == 'uri')
    {
        $rip = $_SERVER['REMOTE_ADDR'];
        if( strpos($rip, '192.168') !== false ) {
            $r = 'http://192.168.0.3/ophone/bbs';
        }
    }
VN:F [1.7.5_995]
Rating: 0.0/10 (0 votes cast)
VN:F [1.7.5_995]
Rating: -1 (from 3 votes)

Java注释中的@deprecated与源代码中的@Deprecated0

首先,请注意标题,这两个标记有大小写之分,一个是D,一个是d

源代码标记@Deprecated是在JDK1.5中作为内置的annotation引入的,用于表明类(class)、方法(method)、字段(field)已经不再推荐使用,并且在以后的JDK版本中可能将其删除,编译器在默认情况下检测到有此标记的时候会提示警告信息。

Java注释中的@deprecated用于在用Javadoc工具生成文档的时候,标注此类/接口、方法、字段已经被废止。

不过后者还有一个功能就是和源代码标记@Deprecated同样的功能,在JDK1.4版本之后,该功能被@Deprecated所取代。

VN:F [1.7.5_995]
Rating: 0.0/10 (0 votes cast)
VN:F [1.7.5_995]
Rating: -2 (from 2 votes)


Switch to our mobile site