为什么strpos PHP不能与fsockopen响应一起工作


Why strpos PHP not work with fsockopen response?

为什么strpos PHP不能使用fsockopen响应?

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

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

,但如果没有找到文本。它将是echo

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

本例中为found text,但仍为echo

{"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错误,如果字符串与你正在搜索的内容开始,它将返回int(0),这是"有点假" PHP的定义。显式检查false,像这样

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

确保你使用的是!==而不是!=

和作为经验法则,永远不要在PHP中使用松散的比较运算符,如果你可以避免它,可能会发生滑稽的错误:https://3v4l.org/tT4l8