Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP从一个函数中生成两个不同的结果localhost和live host_Php - Fatal编程技术网

PHP从一个函数中生成两个不同的结果localhost和live host

PHP从一个函数中生成两个不同的结果localhost和live host,php,Php,我不知道为什么我从同一个函数中得到两个不同的结果,当我在本地主机中使用它时,我得到一个结果,当我将文件上传到主机时,我得到不同的结果。 我测试它,我给它相同的词,我得到两个不同的结果。 这是CAPTCHA库中的一个函数: 函数($value){ $hash=5381; $value=strtoupper($value); 对于($i=0;$i

我不知道为什么我从同一个函数中得到两个不同的结果,当我在本地主机中使用它时,我得到一个结果,当我将文件上传到主机时,我得到不同的结果。 我测试它,我给它相同的词,我得到两个不同的结果。 这是CAPTCHA库中的一个函数:

函数($value){
$hash=5381;
$value=strtoupper($value);
对于($i=0;$i$hash=($hash这可能与操作系统是32位还是64位有关。如果将$hash向左移得太远,可能会导致溢出错误,并返回负数

解决方案取决于您的需要。如果您只需要一个正整数,并且值在不同操作系统之间是否一致并不重要,只需使用abs()包装返回值以确保结果为正即可

如果您需要结果始终保持一致,则可能需要截断结果以最多32位的形式存储。使用类似于:

$32bitresult = rphash($value) & 0xFFFFFFFF;
应该有用

注意:您可能需要添加一项检查,以查看rphash的结果是否为阴性,然后再对两者进行比较

看看这个类似的问题/答案:


我还无法测试代码,但至少它会对您有所帮助。

问题在于您的本地主机是32位的,而您的主机是64位的。要了解原因,请阅读上接受的答案。要总结:


给我们$value和两个不同的$hash。这两台机器上的编码是什么?试试
mb_strotupper()
并指定编码。@mseifert我给它这个单词bababa在localhost中我得到-1565213183,在live host中我得到1149486022145在64位系统上,取这两个值,转换成二进制,然后取字符串的最后32位。在这两种情况下你都得到
1010001010101101001011111000000001
。@NiettheDarkAbsol解决方案是什么enDepends是你想要的。根据OP得到的值判断(根据他们的评论),这当然是。我想在live host中获得与localhost相同的结果。你能帮我一下吗。我不明白你所说的注释是什么意思。我尝试了你上面写的内容,但仍然得到了两个不同的结果。非常感谢你我做了
$hash
$32bitresult = rphash($value) & 0xFFFFFFFF;
function rpHash($value) {
    $hash = 5381;
    $value = strtoupper($value);
    for($i = 0; $i < strlen($value); $i++) {
       $hash = (($hash << 2) + $hash) + ord(substr($value, $i));
    }
    return $hash;
}