linux服务器中不支持soap及bcmul函数的结局方法

三 3rd, 2010  , ,
0

Comments

新的程序里用了webserice接口,部到服务器,先是提示:bcmul() 函数不可用,网上搜索一番,得知这是php的高精度函数,需要在编译php的时候加入此模块,于是在编译脚本里增添 “–enable-bcmath” 后重新编译、重启apache然后此错误解决;

然后有遇到报错“Class ‘SoapClient’ not found”,网上搜索有很多解决办法,总结如下:

1.把php的扩展打开;

对于此我要说一下,很多人总喜欢以偏概全,因为windows服务器上的结局办法就是把extension=php_soap.dll的扩展打开,但是这对linux压根没用,所以失败;

2.扩展编译extension = “soap.so”;

这个方法算是比较靠谱的,OCI8模块大多也通过此方式安装扩展,这里要用到所谓的phpize,但是不知道是我人品问题还是怎么搞的,这样编译的oci也不成功,编译的soap也不成功

3.编译脚本里加入“–enable-soap”;

这是最后解决问题的办法,与上面的高进度函数库类似,重新编译一下php就好了,问题解决。

总结:最近几天在配一台64位redhat AS 5.1服务器的环境,gd和oci这俩扩展都快烦死我了,网上的文章参照了一堆,但是发现个问题,就是网上很多文章都是抄袭,一种解决办法找了好几十个网站上都是一样的,包括语句中的语病,很多技术人员这是对自己不负责任,如果你真的领悟了,自己写一下就行了,不领悟就别摘抄,既丢人又让搜索增加难度;

IE6下PNG透明背景解决方法

十二 27th, 2009  , , , ,
1

Comments

虽然FF和IE7以上浏览器版本已经解决png背景透明的问题,但是每次做页面都要考虑IE6那部分用户的存在,所以纠结不已,在网上胡乱找了一通,终于找着一个可以解决问题的办法,是不是最佳办法就不知道了,反正是我找的方法里比较靠谱的,如下:

http://www.dillerdesign.com/experiment/DD_belatedPNG/

大概的意思写的很明白了,就是最初要将这个js引入页面,然后判断是否为IE6,如果是就执行一个js函数,此js函数的参数就是含png透明北京设置相关的css的class或者id名,问题解决!

PHP获取Oracle数据乱码问题

九 27th, 2009
0

Comments

情况是这样的:

  

oracle的编码是GBK,PHP页面的编码是UTF-8,在PHP的页面进行了一次iconv转码,以保证编码统一

 

出的问题是:

不管转码不转码,页面上从oracle获取的中文始终显示为“?”,即一个个的问号。

 

解决问题:

从mysql查询的角度出发,我觉得是少了set names ***,但问了DBA,oracle没有相关的命令行,所以排出这个问题;

又把问题的集中点放在转码上,折腾半小时,把程序里各个地方都加了测试参数,发现根源上的数据就有问题,不在转码上,于是写了单独一个php的oracle的查询页用来测试,结果如我所想还是乱码,所以立刻排出页面的问题;

最后在google的帮助下找到一篇问章,说是需要在init.d下的httpd里引入环境变量,由于本机没有那个启动文件,所以只能在apachectl里加入如下代码:

export NLS_LANGUAGE=”SIMPLIFIED CHINESE”

 重启apache服务,问题解决!!

plsql高版本无法设置Fixedsys字体解决办法(win7&winXP适用)

七 13th, 2009  , , , ,
0

Comments

设置如下:
Tools->Preferences->Oracle->Options->Unicode enabled 勾去掉就可以再次看到Fixedsys 字体了

如果你用的是win7,那么还需要进行如下设置:

打开 “控制面板->外观和个性化->字体” 在做边栏有 “字体设置”,点开后将 “根据语言设置隐藏字体”前面的勾去了,这样就可以自由设置了,ue和plsql在win7下设置不了fixedays字体都是这个原因;

转载:从SQL语言的分类谈COMMIT和ROLLBACK的用法

三 26th, 2009  , , ,
0

Comments

从功能上划分,SQL语言可以分为DDL,DML和DCL三大类。

  1. DDL(Data Definition Language)
    数据定义语言,用于定义和管理 SQL 数据库中的所有对象的语言 ;
    CREATE—创建表
    ALTER—修改表
    DROP—删除表
  2. DML(Data Manipulation Language)
    数据操纵语言,SQL中处理数据等操作统称为数据操纵语言 ;
    INSERT—数据的插入
    DELETE—数据的删除
    UPDATE—数据的修改
    SELECT—数据的查询
  3. DCL(Data Control Language)
    数据控制语言,用来授予或回收访问数据库的某种特权,并控制数据库操纵事务发生的时间及效果,对数据库实行监视等;
    GRANT—授权。
    ROLLBACK—回滚
    COMMIT—提交。

提交数据有三种类型:显式提交、隐式提交及自动提交。下面分别说明这三种类型。

(1) 显式提交

用COMMIT命令直接完成的提交为显式提交。

(2) 隐式提交

用SQL命令间接完成的提交为隐式提交。这些命令是:

ALTER,AUDIT,COMMENT,CONNECT,CREATE,DISCONNECT,DROP,

EXIT,GRANT,NOAUDIT,QUIT,REVOKE,RENAME。

(3) 自动提交

若把AUTOCOMMIT设置为ON,则在插入、修改、删除语句执行后,

系统将自动进行提交,这就是自动提交。其格式为: SQL>SET AUTOCOMMIT ON;

COMMIT / ROLLBACK这两个命令用的时候要小心。 COMMIT / ROLLBACK 都是用在执行 DML语句(INSERT / DELETE / UPDATE / SELECT )之后的。DML 语句,执行完之后,处理的数据,都会放在回滚段中(除了 SELECT 语句),等待用户进行提交(COMMIT)或者回滚 (ROLLBACK),当用户执行 COMMIT / ROLLBACK后,放在回滚段中的数据就会被删除。

(SELECT 语句执行后,数据都存在共享池。提供给其他人查询相同的数据时,直接在共享池中提取,不用再去数据库中提取,提高了数据查询的速度。)

所有的 DML 语句都是要显式提交的,也就是说要在执行完DML语句之后,执行 COMMIT 。而其他的诸如 DDL 语句的,都是隐式提交的。也就是说,在运行那些非 DML 语句后,数据库已经进行了隐式提交,例如 CREATE TABLE,在运行脚本后,表已经建好了,并不在需要你再进行显式提交。

文章出处:http://www.diybl.com/course/7_databases/sql/sqlServer/2007115/84388.html

MyEclipse 快捷键大全

三 11th, 2009  , ,
0

Comments

MyEclipse 快捷键大全
(1)Ctrl+M切换窗口的大小
(2)Ctrl+Q跳到最后一次的编辑处
(3)F2当鼠标放在一个标记处出现Tooltip时候按F2则把鼠标移开时Tooltip还会显示即Show Tooltip Description。
          F3跳到声明或定义的地方。
          F5单步调试进入函数内部。
          F6单步调试不进入函数内部,如果装了金山词霸2006则要把“取词开关”的快捷键改成其他的。
          F7由函数内部返回到调用处。
          F8一直执行到下一个断点。
(4)Ctrl+Pg~对于XML文件是切换代码和图示窗口
(5)Ctrl+Alt+I看Java文件中变量的相关信息
(6)Ctrl+PgUp对于代码窗口是打开“Show List”下拉框,在此下拉框里显示有最近曾打开的文件
(7)Ctrl+/ 在代码窗口中是这种//~注释。
          Ctrl+Shift+/ 在代码窗口中是这种/*~*/注释,在JSP文件窗口中是<!–~–>。
(8)Alt+Shift+O(或点击工具栏中的Toggle Mark Occurrences按钮) 当点击某个标记时可使本页面中其他地方的此标记黄色凸显,并且窗口的右边框会出现白色的方块,点击此方块会跳到此标记处。
(9)右击窗口的左边框即加断点的地方选Show Line Numbers可以加行号。
(10)Ctrl+I格式化激活的元素Format Active Elements。
            Ctrl+Shift+F格式化文件Format Document。
(11)Ctrl+S保存当前文件。
            Ctrl+Shift+S保存所有未保存的文件。
(12)Ctrl+Shift+M(先把光标放在需导入包的类名上) 作用是加Import语句。
            Ctrl+Shift+O作用是缺少的Import语句被加入,多余的Import语句被删除。
(13)Ctrl+Space提示键入内容即Content Assist,此时要将输入法中Chinese(Simplified)IME-Ime/Nonlme Toggle的快捷键(用于切换英文和其他文字)改成其他的如改成Ctrl+Shift+Z,同时在“Text Service and Input Languages”对话框中删掉Chinese(PRC)下面的其他中文输入法只保留紫光输入法,此时按Ctrl+Shift+Z将在英文和紫光中文之间切换。
            Ctrl+Shift+Space提示信息即Context Information。
(14)Ctrl+D删除当前行。
(15)双击窗口的左边框可以加断点。
(16)在.jap.或.java等文件中右键选“Campare With”或“Replace With”可以找到所有操作的历史记录。
(17)在菜单中选Window-Show View-Navigator可调出导航功能窗。
(18)Ctrl+1 快速修复(最经典的快捷键,就不用多说了)

Ctrl+Alt+↓ 复制当前行到下一行(复制增加)
Ctrl+Alt+↑ 复制当前行到上一行(复制增加)

Alt+↓ 当前行和下面一行交互位置(特别实用,可以省去先剪切,再粘贴了)
Alt+↑ 当前行和上面一行交互位置(同上)
Alt+← 前一个编辑的页面
Alt+→ 下一个编辑的页面(当然是针对上面那条来说了)

Alt+Enter 显示当前选择资源(工程,or 文件 or文件)的属性

Shift+Enter 在当前行的下一行插入空行(这时鼠标可以在当前行的任一位置,不一定是最后)
Shift+Ctrl+Enter 在当前行插入空行(原理同上条)

Ctrl+Q 定位到最后编辑的地方
Ctrl+L 定位在某行 (对于程序超过100的人就有福音了)
Ctrl+M 最大化当前的Edit或View (再按则反之)
Ctrl+/ 注释当前行,再按则取消注释
Ctrl+O 快速显示 OutLine
Ctrl+T 快速显示当前类的继承结构
Ctrl+W 关闭当前Editer
Ctrl+K 参照选中的Word快速定位到下一个
Ctrl+E 快速显示当前Editer的下拉列表(如果当前页面没有显示的用黑体表示)

Ctrl+/(小键盘) 折叠当前类中的所有代码
Ctrl+×(小键盘) 展开当前类中的所有代码
Ctrl+Space 代码助手完成一些代码的插入(但一般和输入法有冲突,可以修改输入法的热键,也可以暂用Alt+/来代替)

Ctrl+Shift+E 显示管理当前打开的所有的View的管理器(可以选择关闭,激活等操作)
Ctrl+J 正向增量查找(按下Ctrl+J后,你所输入的每个字母编辑器都提供快速匹配定位到某个单词,如果没有,则在stutes line中显示没有找到了,查一个单词时,特别实用,这个功能Idea两年前就有了)

Ctrl+Shift+J 反向增量查找(和上条相同,只不过是从后往前查)

Ctrl+Shift+F4 关闭所有打开的Editer

Ctrl+Shift+X 把当前选中的文本全部变味小写

Ctrl+Shift+Y 把当前选中的文本全部变为小写

Ctrl+Shift+F 格式化当前代码

Ctrl+Shift+P 定位到对于的匹配符(譬如{}) (从前面定位后面时,光标要在匹配符里面,后面到前面,则反之)

下面的快捷键是重构里面常用的,本人就自己喜欢且常用的整理一下(注:一般重构的快捷键都是Alt+Shift开头的了)

Alt+Shift+R 重命名 (是我自己最爱用的一个了,尤其是变量和类的Rename,比手工方法能节省很多劳动力)

Alt+Shift+M 抽取方法 (这是重构里面最常用的方法之一了,尤其是对一大堆泥团代码有用)

Alt+Shift+C 修改函数结构(比较实用,有N个函数调用了这个方法,修改一次搞定)

Alt+Shift+L 抽取本地变量( 可以直接把一些魔法数字和字符串抽取成一个变量,尤其是多处调用的时候)

Alt+Shift+F 把Class中的local变量变为field变量 (比较实用的功能)

Alt+Shift+I 合并变量(可能这样说有点不妥Inline)

Alt+Shift+V 移动函数和变量(不怎么常用)

Alt+Shift+Z 重构的后悔药(Undo)

备用信息,来源于互联网!

Tomcat配置虚拟路径

二 17th, 2009  , , ,
0

Comments

在Tomcat5.5及以上的版本中配置虚拟路径很方便,无需重启Tomcat;
新建一个xml文件,写入下列内容:

  1. <context path="/jsp"   docBase="D:/jsp"   debug="0"   reloadable="true"   crossContext="true">
  2. </context>

其中path=”/jsp”表示配置虚拟目录的名称,docBase=”D:/jsp”表示虚拟目录指向的实际目录。

将此文件保存在Tomcat安装目录的conf/Catalina/localhost文件夹下,命名为jsp.xml。

保存后,Tomcat5.5会自动更新配置。

注:虚拟目录xml文件的命名规则是:虚拟目录的名称为xml文件的文件名,若此处虚拟目录的名称为/jsp,则xml文件名为jsp.xml

在地址栏内输入http://IP:8080/jsp/*.jsp访问即可。

文章来源:Tomcat5.5中配置虚拟路径

maxthon中文首页的小问题

一 8th, 2009  , , ,
3

Comments

    细心的朋友可能和我一样早就发现这个问题了,打开http://www.maxthon.cn后页面上方会动态实时的显示maxthon被下载的次数,如下图:

正常的效果

    但是如果你打开的是http://maxthon.cn会发现这个功能失效了,显示在页面上的是

非正常效果

    这个问题貌似已经很久很久了,如果我记忆力足够好的话我发现这个小问题已经有一年时间了,原以为maxthon的开发人员会在不久就修改掉,可惜没有,我查看了这页面和其附属的js代码,大概知道是什么原因造成的了;

    首先,页面上下载次数是一个指定id的span,然后用js去修改这个obj的innerHTML,目前大家好像都是这样做的;页面代码如下:

  1. <span class="downloadNowCounter">已有 <span id="counternumber">………</span> 次下载</span>

    然后我在其页面附属的js里找到了:

  1. maxWebsite.counterDataURL = "http://www.maxthon.cn/api/counter";

及相关函数,相关函数不再赘述,问题就出在这句代码里;用浏览器打开http://www.maxthon.cn/api/counter得到的是一个数字,与页面正常显示的下载数字格式是一样的,这也就是下载数量的source,js每秒都会触发这个链接从而得到这些数字然后用getElementById的方法将得到的数字写入预先定义好id的span里,但为什么这里会出错呢?

    用FF打开http://maxthon.cn,在错误控制台里可以看到N条警告,即“安全错误:位于http://maxthon.cn/的内容不可以载入来自http://www.maxthon.cn/api/counter的数据。”

    我的理解是:这里的http://www.maxthon.cn/api/counter走的http协议,就如PHP的file_get_contents一样,如果不写http地址,只写出php相对路径,只会读取那个PHP文件,而不会用php去解析此文件;但是这里的js自身的安全不允许载入非本域名以外的内容,所以导致此效果没有实现;

    我想解决办法很简单,在js中加载http://www.maxthon.cn/api/counter的时候判断一下域名,即如果是用http://maxthon.cn访问网站就该加载http://maxthon.cn/api/counter,这样问题自然接就解决了;

    写完这文章我自己也觉得此文貌似没有任何意义,不过我觉得像maxthon这样的公司对自身和产品还是精益求精的比较好,毕竟浏览器和用户的关系很密切,而且maxthon有很大一批忠实用户;

left join造成COUNT会有M*N的问题的解決方式

一 8th, 2009  , , ,
0

Comments

先看例子:
表A
+----+-------+
| id | name |
+----+-------+
| 1 | jason |
| 2 | tom |
| 3 | jack |
| 4 | mathy |
+----+-------+

表log_1
+----+------+
| id | A_id |
+----+------+
| 1 | 1 |
| 2 | 2 |
| 3 | 1 |
| 4 | 1 |
| 5 | 3 |
| 6 | 2 |
+----+------+

表log_2
+----+------+
| id | A_id |
+----+------+
| 1 | 4 |
| 2 | 2 |
| 3 | 3 |
| 4 | 3 |
| 5 | 4 |
| 6 | 1 |
| 7 | 3 |
| 8 | 2 |
+----+------+

想同时查询表A的各条数据在log_1和log_2中的出现次数统计,用以下sql代码查询

  1. SELECT A . * , count( b.id ) AS log_1_num, count( c.id ) AS log_2_num
  2. FROM A
  3. LEFT JOIN log_1 b ON A.id = b.A_id
  4. LEFT JOIN log_2 c ON A.id = c.A_id
  5. GROUP BY A.id

结果如下:

+----+-------+-----------+-----------+
| id | name | log_1_num | log_2_num |
+----+-------+-----------+-----------+
| 1 | jason | 3 | 3 |
| 2 | tom | 4 | 4 |
| 3 | jack | 3 | 3 |
| 4 | mathy | 0 | 2 |
+----+-------+-----------+-----------+

看到此数据第一反映是他肯定有问题,因为log_1_num的总和和log_1表的条数并不相等,仔细看发现是第二次left join的时候将log_2的表里数据与第一次的left join做了笛卡尔乘,所以出现了m*n 的效果,多半都要做 (m*n)/m才能得出正确的数值;

但是看官方的手册里给distinct可以解决次问题,即

  1. select A.*,count(distinct b.id) as log_1_num,count(distinct c.id) as log_2_num
  2. from A
  3. left join log_1 b on A.id=b.A_id
  4. left join log_2 c on A.id=c.A_id
  5. group by A.id

结果如下,
+----+-------+-----------+-----------+
| id | name | log_1_num | log_2_num |
+----+-------+-----------+-----------+
| 1 | jason | 3 | 1 |
| 2 | tom | 2 | 2 |
| 3 | jack | 1 | 3 |
| 4 | mathy | 0 | 2 |
+----+-------+-----------+-----------+

当然,distinct的查询效率貌似不怎么样,但是这是我想到的比较好的办法了;

当然还有另一种办法,那就是用A表分别和log_1和log_2左关联,然后利用将结果合并,貌似那样也不咋滴吧!

PHP邮箱有效性判断

十二 2nd, 2008  , , , , , , , ,
2

Comments

   今天准备写个判断邮箱有效性的小函数,无非是俩个判断:
   1、格式
   2、域名有效性
   格式用正则可以搞定,而判断域名有效性则要用到checkdnsrr,在手册里看下这个函数居然找到一个现成的例子,省事了,直接copy来!

备注:此函数只可以在linux主机上应用!

  1. function validate_email($email){
  2.  
  3. $exp = "^[a-z\'0-9]+([._-][a-z\'0-9]+)*@([a-z0-9]+([._-][a-z0-9]+))+$";
  4.  
  5. if(eregi($exp,$email)){
  6.  
  7. if(checkdnsrr(array_pop(explode("@",$email)),"MX")){
  8. return true;
  9. }else{
  10. return false;
  11. }
  12.  
  13. }else{
  14.  
  15. return false;
  16.  
  17. }
  18. }