0

请考虑以下代码:

$imagePath = "https://s22.postimg.org/3k3o9ly8t/testigo.jpg";
$imagedata = get that image data through curl and store in this variable;
echo strlen($imagedata); // outputs 4699

if(strlen($imagedata) == 4699 ) {
    echo "length is 4699";
}

即使 strlen 值为 4600,上面的 if 条件也永远不会成立。看起来很奇怪;我错过了什么吗?我已经尝试过了mb_strlen,但没有用。

更新:它似乎适用于某些图像,但不适用于以下图像。


代码:

$strImageURL = "https://s22.postimg.org/3k3o9ly8t/testigo.jpg";

$strImageData = getData($strImageURL);

echo "<br />" . strlen($strImageData);

if(strlen($strImageData) === 4699) {
    echo "true";
}

function getData($strSubmitURL)
{

    $strData = null;

    $ch = curl_init();

    //return parameter
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 120);
    curl_setopt($ch, CURLOPT_TIMEOUT, 140);

    //site name
    curl_setopt($ch, CURLOPT_URL,$strSubmitURL);


    // don' verify ssl host
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,false);
    $strData = curl_exec ($ch);

    if (!$strData) {
        //die ("cURL error: " . curl_error ($ch) . "\n");
        return '';
    }
    curl_close ($ch);

    unset($ch);

    return $strData;
}
4

2 回答 2

3

这对我有用:

$url = "http://static.bbci.co.uk/frameworks/barlesque/2.51.4/orb/4/img/bbc-blocks-dark.png";
$imagedata = file_get_contents($url);
//echo strlen($imagedata); // outputs 1020

if(strlen($imagedata) == 1020 ) {

    echo "length is 1020";

}

作为进一步的故障排除,我会var_dump(get_defined_vars());在代码末尾和 if 语句中尝试 a 以查看发生了什么。

//编辑/更新:使用您的 url,并两次放入 var 转储:

$url = "http://s22.postimg.org/3k3o9ly8t/testigo.jpg";
$imagedata = file_get_contents($url);
$strlen =  strlen($imagedata); // outputs 4669
var_dump($strlen);

if($strlen == 4669 ) {

    echo "length is 4669 \n";
    var_dump($strlen);
}

返回:

PhpMate running PHP 5.3.15 with (/usr/bin/php)
 >>> untitled

int(4669)
length is 4669 
int(4669)
于 2013-09-10T18:52:22.250 回答
-1

strlen()用于计算字符串等于一个字符的字节数,不一定等于 UTF-8 中的 1 个字节

另一个问题可能是类型转换,因为 PHP 对此有如此宽松的规则。这对你有用吗?

if((int)strlen($imagedata) == 4600 ) {

    echo "length is 4600";

}

或者

if(strlen($imagedata) == '4600' ) {

    echo "length is 4600";

}
于 2013-09-10T18:48:57.737 回答