繁体   English   中英

为什么 strpos PHP 不适用于 fsockopen 响应?

[英]Why strpos PHP not work with fsockopen response?

为什么strpos PHP不适用于 fsockopen 响应?

加载此代码时。 此代码将请求sdgsgsdgsfsdfsd.cawhois.cira.ca服务器并查找文本Domain status: available strpos PHP如果找到它将会回显

{"domain":"sdgsgsdgsfsdfsdca","availability":"available"}

但如果没有找到文本。 这将是回声

{"domain":"sdgsgsdgsfsdfsdca","availability":"TAKEN"}

在这种情况下found text但仍然回显

{"domain":"sdgsgsdgsfsdfsdca","availability":"TAKEN"}

我该怎么办?

<?php
$server = "whois.cira.ca";
$response = "Domain status: available";
showDomainResult(sdgsgsdgsfsdfsd.ca,$server,$response); 

function checkDomain($domain_check,$server,$findText)
{
    $con = fsockopen($server, 43);
    if (!$con) return false;
    fputs($con, $domain_check."\r\n");
    $response = ' :';
    while(!feof($con)) 
    {
        $response .= fgets($con,128); 
    }
    echo $response."<BR><BR><BR><BR><BR>";
    fclose($con);
    if (strpos($response, $findText))
    {
        return true;
    }
    else 
    {
        return false; 
    }
}

function showDomainResult($domain_check,$server,$findText)
{
    if (checkDomain($domain_check,$server,$findText))
    {
        class Emp 
        {
            public $domain = "";
            public $availability = "";
        }
        $e = new Emp();
        $e->domain = $domain_check;
        $e->availability = "available";
        echo json_encode($e);
    }
    else
    {
        class Emp 
        {
            public $domain = "";
            public $availability = "";
        }
        $e = new Emp();
        $e->domain = $domain_check;
        $e->availability = "TAKEN";
        echo json_encode($e);
    }
}
?> 

您使用的 strpos 错误,如果字符串 START 包含您要搜索的内容,它将返回 int(0),根据 PHP 的定义,这是“有点假”。 明确检查false ,像这样

return false!==strpos($response, $findText);

并确保您使用的是!==不是!=

根据经验,如果可以避免,请不要在 PHP 中使用松散比较运算符,否则可能会出现爆笑错误: https : //3v4l.org/tT4l8

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM