【发布时间】:2018-06-04 22:24:54
【问题描述】:
我正在研究来自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);
}
【问题讨论】:
-
我猜错了,因为它什么也没做
-
这对我来说看起来很奇怪,但我确实注意到赋值实际上是三元语句的条件语句。我自己也无法破译这个,但我认为这是一个很好的参考框架。
-
我也将其称为三元语句。我猜第二个等号应该是双等号,所以
==而不是=... -
@arkascha 我不这么认为,因为 $sysn 变量的类型是 String 并且已通过 gethostbyname($sysn); 确认;
-
@smith 我想是这样,但它可能是可变阴影吗?