这是一个困扰我很长时间的问题,曾经由于没有思路,一直搁置没有去追究,现在要对该模块做一些修改,就想顺便把这个问题给查明白了,事情是这样的…
我们写了一个PHP模块String2Hash,其实里面只有一个函数叫: String2Hash() ,只是要将一个字符串hash成一个整数,由于PHP中的整型都是有符号的,该算法涉及移位,求和,求模,等操作,用PHP实现比较麻烦,就用C写了一个PHP的模块。
编译完之后,执行:
php –re String2Hash
就报错如下:
PHP Warning: Internal error: Cannot find extension function String2Hash in global function table in Unknown on line 0
虽然有警告,但是该模块时可以正常加载和使用的; 一般来讲,程序员只关心error,不关心Warning的,但是我就想知道个究竟。
第一步: 先做一个helloworld模块,这个完全是生成的,只有很少的修改,结果是没有报错的。
第二步: 将自己的函数添加进去,开始报错。
第三步: 将自己的函数重命名为myhash, 编译不再报错。问题基本出现在函数名上了。可能是大小写的问题吧?突然想到报错提示,可能是global function table这个数组的key是区分大小写的?
第四步: 将String2Hash 重命名为string2hash, 为了保险,将所有出现的地方都改成小写吧,反正PHP函数是不区分大小写的,改成小写也无妨。 编译不再报错,测试通过,问题解决
have fun!!!