[英]PHP's strlen function behaving strangely
请考虑以下代码:
$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;
}
这对我有用:
$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语句中查看最新情况。
//编辑/更新:使用您的网址,并同时放入两次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)
strlen()
用于计算字符串等于一个字符的字节数,不一定等于UTF-8中的1个字节
另一个问题可能是类型转换,因为PHP对此有如此松散的规则。 这对你有用吗?
if((int)strlen($imagedata) == 4600 ) {
echo "length is 4600";
}
要么
if(strlen($imagedata) == '4600' ) {
echo "length is 4600";
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.