Skip to content

被保护: 我的WebService

  • 盛大灵游记:http://shop.ourgame.com/GLGGBilling/Service4Partner.asmx
  • 新浪机战:http://222.77.177.169/sinapay/ChargeMoneyInterface1.asmx
  • 腾龙功夫世界:http://secure.tengwu.com.cn/MainService.asmx
  • 星级家园:(非webservice提供接口)
  • PHP5 Soap 接口代码框架:

    try {
    $response = $soap_client->__soapCall("m_GetRolesList",$params);
    if ($response['m_GetRolesListResult'] != 1) {
    $err = m_GFSJ_GetErrText($response['m_GetRolesListResult']);
    $loge->uniLog("$err");
    return false;
    }else {
    $logv->uniLog("{$response['lsRoleIDName']}");
    $rolestr = trim($response['lsRoleIDName']);
    return $rolestr;
    }
    } catch (SoapFault $fault) {
    $loge->uniLog("faultcode:{$fault->faultcode}\tfaultstring:{$fault->faultstring}");
    return false;
    }

    关于sizeof()的简单解析

    在所有说明之前,先给出一道题目:

    int a=256;
    printf("%d\n", sizeof(++a));
    printf("%d\n", a);

    那么到底打印的是多少呢?

    应该是4和256,第一个答案大家应该已经没有问题了,但是为什么在++a以后,a的数值还是没有发生变化呢?因为sizeof()是一个运算符,在其中的所有的运算都是无效的,所以++a根本就没有运行。

    上面的一个例子提醒我们,虽然sizeof看这简单,但是其中还是有很多的问题值得讨论的:

    一、sizeof的概念
    sizeof是C语言的一种单目操作符,如C语言的其他操作符++、–等。它并不是函数。sizeof操作符以字节形式给出了其操作数的存储大小。操作数可以是一个表达式或括在括号内的类型名。操作数的存储大小由操作数的类型决定。

    二、sizeof的使用方法 
    1、用于数据类型 

    sizeof使用形式:sizeof(type)

    数据类型必须用括号括住。如sizeof(int)。

    2、用于变量 

    sizeof使用形式:sizeof(var_name)或sizeof var_name

    变量名可以不用括号括住。如sizeof (var_name),sizeof var_name等都是正确形式。带括号的用法更普遍,大多数程序员采用这种形式。

    注意:sizeof操作符不能用于函数类型,不完全类型或位字段。不完全类型指具有未知存储大小的数据类型,如未知存储大小的数组类型、未知内容的结构或联合类型、void类型等。

    如sizeof(max)若此时变量max定义为int max(),sizeof(char_v) 若此时char_v定义为char char_v [MAX]且MAX未知,sizeof(void)都不是正确形式。

    三、sizeof的结果 
    sizeof操作符的结果类型是size_t,它在头文件 <stddef.h>

    中typedef为unsigned int类型。该类型保证能容纳实现所建立的最大对象的字节大小。

    1、若操作数具有类型char、unsigned char或signed char,其结果等于1。

    ANSI C正式规定字符类型为1字节。

    2、int、unsigned int 、short int、unsigned short 、long int 、unsigned long 、 float、double、long double类型的sizeof 在ANSI C中没有具体规定,大小依赖于实现,一般可能分别为2、2、2、 2、 4、4、4、8、10。

    3、当操作数是指针时,sizeof依赖于编译器。例如Microsoft C/C++7.0中,near类指针字节数为2,far、huge类指针字节数为4。一般Unix的指针字节数为4。

    4、当操作数具有数组类型时,其结果是数组的总字节数。

    5、联合类型操作数的sizeof是其最大字节成员的字节数。结构类型操作数的sizeof是这种类型对象的总字节数,包括任何垫补在内。

    让我们看如下结构:

    struct {char b; double x;} a;

    在某些机器上sizeof(a)=12,而一般sizeof(char)+ sizeof(double)=9。

    这是因为编译器在考虑对齐问题时,在结构中插入空位以控制各成员对象的地址对齐。如double类型的结构成员x要放在被4整除的地址。

    6、如果操作数是函数中的数组形参或函数类型的形参,sizeof给出其指针的大小。

    四、sizeof与其他操作符的关系 
    sizeof的优先级为2级,比/、%等3级运算符优先级高。它可以与其他操作符一起组成表达式。如i*sizeof(int);其中i为int类型变量。

    五、sizeof的主要用途 
    1、sizeof操作符的一个主要用途是与存储分配和I/O系统那样的例程进行通信。例如:

    void *malloc(size_t size),

    size_t fread(void * ptr,size_t size,size_t nmemb,FILE * stream)。

    2、sizeof的另一个的主要用途是计算数组中元素的个数。例如:

    void * memset(void * s,int c,sizeof(s))。

    六、建议 
    由于操作数的字节数在实现时可能出现变化,建议在涉及到操作数字节大小时用sizeof来代替常量计算。

    PHP忽略用户中断

            做  Web 开发的人都知道,浏览器和服务器之间是通过 HTTP 协议进行连接通讯的。这是一种基于请求和响应模型的协议。浏览器通过 URL 向某台服务器发起请求(Request),Web 服务器接收到请求,执行一段程序,然后做出响应(Response),也就是一段字符串,这个字符串符合 HTTP 协议的格式,有 HEAD 和 BODY 两部分。

    这其中有一个问题,Web  服务器执行一段程序,可能几毫秒就完成,也可能几分钟都完不成。如果程序执行缓慢,用户可能没有耐心等下去,就关闭浏览器了。这个时候,服务器会接收到连 接状态改变的通知,因为 HTTP  是最上层的协议,下面还有一层 TCP 协议,TCP  会知道连接中断。连接一断,服务端的程序会立即停止执行。

    现在说到问题的关键了,服务端的程序立即停止执行,如果这个程序只是读取信息的还好说,停了不读了就是了。万一是一个写入的程序呢?比如,用户提交一 段文本,也许服务端的设计比较复杂,需要同时更新好几个表,但由于某些原因,例如其中一个表被其他进程锁定,那么这个程序就会一直等待,这个时候用户要是 关闭浏览器,那程序就不等了,直接退出了。结果就是这条信息保存不完整。

    举个具体的例子,用户提交的文本需要写到 A、B、C、D 四个表里,写入 A、B 两个表可能 0.1 毫秒就完成了,但 C 表被另一个进程锁定,那当前进程就得一直等,这时用户关闭浏览器,当前进程退出,那么,就会造成一种状况,A、B 表里有新的内容,而 C、D 表里没有这条内容,产生了严重的数据一致性的问题!

    虽然,利用数据库的事务,可以使状态回滚,但结果就是用户的本次提交无效。

    现在希望的是,只要用户提交了,就要成功保存,也许遇到意外情况导致执行时间过长,但用户关闭浏览器也没关系。

    于是,就需要 ignore_user_abort 这个函数。

    当调用 ignore_user_abort(1) 时, 就设定了忽略用户退出这个标志位,也就是不管怎样,也要把程序执行到底,除非在程序中调用了 exit。

    其实,还有另一个函数,register_shutdown_function,它可以注册一个函数或方法,在程序退出的时候调用,有些类似于 javascript 里面的 onunload 和 onbeforeunload 事件。

    这里引用了PHP手册中文版的相关内容:

    章 40. 连接处理
    注意: 以下内容对 PHP 3.0.7 及更高版本适用。

    在 PHP 内部,系统维护着连接状态,其状态有三种可能的情况:

    0 – NORMAL(正常)

    1 – ABORTED(异常退出)

    2 – TIMEOUT(超时)

    当 PHP 脚本正常地运行 NORMAL 状态时,连接为有效。当远程客户端中断连接时,ABORTED 状态的标记将会被打开。远程客户端连接的中断通常是由用户点击 STOP 按钮导致的。当连接时间超过 PHP 的时限(请参阅 set_time_limit() 函数)时,TIMEOUT 状态的标记将被打开。

    可以决定脚本是否需要在客户端中断连接时退出。有时候让脚本完整地运行会带来很多方便,即使没有远程浏览器接受脚本的输出。默认的情况是当远程客户 端连接中断时脚本将会退出。该处理过程可由 php.ini 的 ignore_user_abort 或由 Apache .conf 设置中对应的“php_value ignore_user_abort”以及 ignore_user_abort() 函数来控制。如果没有告诉 PHP 忽略用户的中断,脚本将会被中断,除非通过 register_shutdown_function() 设置了关闭触发函数。通过该关闭触发函数,当远程用户点击 STOP 按钮后,脚本再次尝试输出数据时,PHP 将会检测到连接已被中断,并调用关闭触发函数。

    脚本也有可能被内置的脚本计时器中断。默认的超时限制为 30 秒。这个值可以通过设置 php.ini 的 max_execution_time 或 Apache .conf 设置中对应的“php_value max_execution_time”参数或者 set_time_limit() 函数来更改。当计数器超时的时候,脚本将会类似于以上连接中断的情况退出,先前被注册过的关闭触发函数也将在这时被执行。在该关闭触发函数中,可以通过调 用 connection_status() 函数来检查超时是否导致关闭触发函数被调用。如果超时导致了关闭触发函数的调用,该函数将返回 2。

    需要注意的一点是 ABORTED 和 TIMEOUT 状态可以同时有效。这在告诉 PHP 忽略用户的退出操作时是可能的。PHP 将仍然注意用户已经中断了连接但脚本仍然在运行的情况。如果到了运行的时间限制,脚本将被退出,设置过的关闭触发函数也将被执行。在这时会发现函数 connection_status() 返回 3。

    PHP 的官方网站在线文档有英文原版说明,下面还有一些用户的反馈,也很有价值,这里是链接:

     http://www.php.net/manual/en/features.connection-handling.php

    不常用的Linux进程信息

            ps能够提供不少进程信息,比如进程号、进程运行状态、进程名称、所占CPU时间、所占内存等。除此以外,还有一些不很常用的进程信息,可以用来解决一些 可能很常见的问题 (比如内存泄漏,进程运行异常等)。


    所打开的文件
    获取方法1:
    # ls -l /proc/$PID/fd/

    获取方法2:
    # lsof -p $PID

    内存分配表
    获取方法:
    # lcat /proc/$PID/maps

    堆栈
    获取方法:
    # pstack $PID

    所发出的系统调用
    获取方法:
    # strace -p $PID

    所发出的库函数调用
    获取方法:
    # ltrace -p $PID

    进程继承关系
    获取方法:
    ps -eo user,pid,ppid,%cpu,%mem,vsz,rss,tty,stat,start,time,wchan,command –forest

    运行时dumpcore
    获取方法:
    # gcore $PID

    搞笑对联

    ★上联:风在刮,雨在下,我在等你回电话;下联:为你生,为你死,为你守候一辈子;横批:发错人了。  ★上联:看背影急煞千军万马;下联:转过头吓退百万雄师;横批:我的妈呀

    ★上联:考试不作弊来年当学弟;下联:宁可没人格不可不及格;横批:就是要过!

    ★上联:麻将扑克金花,输完之后回家;下联:古道西风瘦马,断肠人在天涯;横批:惨啊!

    ★上联:去除数字一和二;下联:还有四五六七九;横批:只剩三八!

    ★上联:说你行你就行不行也行;下联:你说不行就不行行也不行;横批:不服不行。

    ★上联:为你痴为你累为你受尽所有罪;下联:为你死为你狂为你咣咣撞大墙;横批:为爱疯狂。

    ★上联:我爱的人名花有主;下联:爱我的人惨不忍睹;横批:命苦。

    ★上联:在上为帅;下联:在下为猪;横批:天蓬元帅。

    ★上联:假名假姓假地址;下联:骗吃骗喝骗感情;横批:愿者上钩。

    ★上联:红米饭南瓜汤,老婆一个孩子一帮;下联:红米饭王八汤,孩子一个老婆一帮;横批:与时俱进。

    ★上联:上压下层层加码,马到成功;下联:下骗上节节掺水,水到渠成;横批:皆大欢喜。

    ★上联:爱与被爱都艰难;下联:有情有缘要时间;横批:情义无价
    ★上联:羊在山坡晒不黑;下联:猪在猪圈捂不白! 横批:我就是我

    微软笔试

            上回微软在北邮的笔试,因为我把周六记成功周日,结果错过了没能去成。不料没过几天,微软再次给我发来邀请邮件,邀请我参加11月4号在北航举行的最后一次笔试。

    虽然微软的邮件里写明了是招应届毕业生,可是抱着“参与第一”的心态,我决定去考一下,就算体验一下微软的招聘题目也不错啊,毕竟机会难得么。

    出门的时候已经比较晚了,小蔡于是加大油门往北航赶。曲曲折折的找到了考场,但还是没有来得及打印简历和邀请函。不过还好,看了身份证之后就让进去了。没有带眼镜,我只好走到最前排,站在黑板正下方去看黑板上写的注意事项。

    题目全是英文的,整个将近20页的考卷上找不出几个中文字。题目分了4部分:第一部分选择题,有单选也有多选,分值还不一样,选错了也有不一样的倒扣分值;第二部分编程,就一道大题,让编一个 Notepad 的自动换行函数,函数原型(记忆中的,可能不完全准确)
    void TextWrap(const char* inText, char* outBuffer, int outBufferLength, int lineWidth)

    分了2个小问,第一问是写出主要的 subroute (单词记得不是很清楚了),第二问才是实现这个函数;第三部分测试,要求写出 20 组测试用例,来测上一题写的函数;第四部分,也是最后一部分,design,应该翻译成设计吧,只是题目跟我理解的设计有点区别:要求设计一个全职父母在工作时可以查看在家的小孩的情况的系统,包括硬件和软件,类似于装备摄像头和麦克风,然后父母使用手持设备通过网络连接进行连线。问题问的比较诡异,问这个系统靠那些方面赚钱,应该具备那些特性,技术上有哪些难点,最后还问手持设备使用专用设备还是在普通手机上使用软件实现比较好,对比这两种实现方式,并说明你选择其中某一种的理由。

    第一部分的选择题,考的东西比较零碎,大体来说,有网络(有一道题问TCP包里能看到哪些内容),编程(C#,C/C++,C++类的对象拷贝和指针拷贝的区别,以及每次都会出的C#代码在哪一行编译不过的问题),算法(二叉树,链表,汉诺塔,vector等),操作系统(给出文件系统的一些说明,问支持的最大单个文件的大小) 等。等到回过头来再去想想,当时很多题目是应该能做对的,只是当时想叉了。这些基础只是还是不能长久的不闻不问啊,稍不留神,便又生疏好多了。

    回家,专心准备明天继续上班吧。

    《色.戒》

         张爱玲的小说本是写的极好的,拍电影的人却太俗气,把好生生的一个故事,摆弄成了“少儿不宜”的限制级。

    但这回看完《色戒》,散场的时候却不像上次看《狙击手》那么意犹未尽。上次是看的兴高采烈,过瘾,这次却没有任何的反应?旧上海的弄堂,奔驰的人力车,汤唯的旗袍,梁朝伟的毫无表情的脸,本都是好的,可是组合到一块,在萤幕上晃来晃去两个多小时,便倦了,乏了,无趣了,无聊了。

    故事中不合情理的地方太多,到最后,结局却是最真实的一种。

    被保护: 旧识再相逢

    陈琼10月28日到北京,送她妹妹来这边参加美术特长生高考集训。集训地点居然在偏远的酒仙桥。

    因为还要上课,30日就匆忙回长沙了。

    ps. 昨晚,冬梅居然打电话过来了。掐指算算,失去联系大约一年多了吧,她的小孩都 15 个月大了。

    周末shopping

            周六,张姐婚礼,折腾完后一堆亲戚朋友的来家里唠嗑。于是,我和小蔡就一起出去逛街,顺便买点冬天的装备。

    首先是去了一趟金五星。最郁闷的是,买第一件东西的时候,由于我的疏忽大意(还沉醉在讲价成功的喜悦中),导致收到一张 ¥20 的假币(周日去招商银行确认是假币,给没收了)。等我们大包小包的回到家,家里正热闹着。只好又出门,去新街口继续逛。

    ————————————–

    总支出:现金 600 + 信用卡 285 。

    Shopping list:

    • 外套一件 金五星  ¥65
    • 鞋一双 金五星  ¥40 (找回一张假的 20,总共支出 60)
    • 贴身衣物 金五星  ¥14
    • 羊毛衫2件 新街口 ¥39+¥59
    • 永久26自行车一辆 新街口 ¥300
    • 喜酒一回 皂君东里 ¥100
    • 上两个月的网费 ¥75
    • 信用卡刷 ¥285 给小蔡买鞋,小蔡给我垫付了外套 65,羊毛衫 20(假币不收),及最后买第二件羊毛衫的时候 100,所以算下来,等于还了小蔡 100

    小蔡的list:

    • 阿迪鞋一双,新街口,¥285
    • 裤子一条,金五星,¥35
    • 外套一件,金五星,¥140
    • 欢乐谷一次,¥160 (周日)

    所谓的汉语编程


    #define 趁还 while
    #define 那个啥 int
    #define 总的来说 main
    #define 买 cin
    #define 卖 cout
    #define 进 >>
    #define 出 <<
    #define 拜拜了 return
    #define 去掉 -=
    #define 等于 =
    #define 屁 100e4
    #define 我说 (
    #define 是吧 )
    #define 啊 a
    #define 那么就 {
    #define 得了 }
    #define 呀 ;
    #include
    using namespace std;

    那个啥 总的来说 我说 那个啥 啊 是吧
    那么就 那个啥 有钱 等于 屁 呀
    趁还 我说 有钱 是吧 那么就
    那个啥 多少 呀 买 进 多少 呀 卖 出 多少 呀 有钱 去掉 多少 呀
    卖 出 多少 呀 得了
    拜拜了 啊 呀 得了