我正在研究来自HTTP-Tunnel Project的一段代码,我在文件lib.php的第315行遇到了这个有线变量赋值
if ($publicname) $sysn=$sysn=$_SERVER["SERVER_ADDR"]?$_SERVER["SERVER_ADDR"]:$_SERVER["SERVER_NAME"];
我不能理解为什么变量$sysn被赋值给自己?
代码行所在的函数:
function getmyip ($publicname) {
// try to get the name wih multiple methods in this order:
// $publicname: SERVER_ADDR, SERVER_NAME, php_uname, uname, hostname, own script
// !$publicname: php_uname, uname, hostname, own script, SERVER_ADDR, SERVER_NAME,
$sysn="";
if ($publicname) $sysn=$sysn=$_SERVER["SERVER_ADDR"]?$_SERVER["SERVER_ADDR"]:$_SERVER["SERVER_NAME"];
if (!$sysn || $sysn=="127.0.0.1" || $sysn=="localhost" || preg_match("/\s/",$sysn)) $sysn=php_uname("n");
if (!$sysn || $sysn=="127.0.0.1" || $sysn=="localhost" || preg_match("/\s/",$sysn)) $sysn=`uname -n`;
if (!$sysn || $sysn=="127.0.0.1" || $sysn=="localhost" || preg_match("/\s/",$sysn)) $sysn=`hostname`;
if ($_SERVER["HTTP_HOST"]!="127.0.0.1" && $_SERVER["HTTP_HOST"]!="locahost") {
$sysurl="http://".$_SERVER["HTTP_HOST"].$_SERVER["PHP_SELF"]."?a=ip";
$sysn=file_get_contents($sysurl);
$sysn=preg_replace("/\\r|\\n/","",$sysn);
}
if (!$sysn || $sysn=="127.0.0.1" || $sysn=="localhost" || preg_match("/\s/",$sysn))
$sysn=$_SERVER["SERVER_ADDR"]?$_SERVER["SERVER_ADDR"]:$_SERVER["SERVER_NAME"];
if (!$sysn) $sysn=$_SERVER["HTTP_HOST"];
return gethostbyname($sysn);
}
发布于 2018-06-05 06:30:43
它什么也做不了。这将与。
if ($publicname) $sysn=$_SERVER["SERVER_ADDR"]?$_SERVER["SERVER_ADDR"]:$_SERVER["SERVER_NAME"];
可能是打字错误?还是别的什么?
发布于 2018-06-05 06:37:50
在PHP中,assignment操作符具有右关联性。这意味着,一个变量被赋值给另一个变量,而另一个变量又被赋值给某个东西,最终这些变量会被赋给最右边的值。因为变量是相同的,所以当其中一个$synsn
被移除时,逻辑不会改变。
https://stackoverflow.com/questions/50689582
复制相似问题