2013-09-10 5 views
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. Это кажется очень странным; я что-то упускаю? Я уже пробовал 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; 
} 
+7

Учитывая ситуацию вы описали, это в принципе не может быть неверно .. и, вероятно, произошел сбой в другом месте вашего кода. – Evert

+0

Если вы пытаетесь определить размер файла, это было бы неправильным способом. Для безопасности используйте if (strlen ($ imagedata) === 4) (обратите внимание на triple =) – Rottingham

+0

[This] (http://stackoverflow.com/questions/2602612/php-remote-file-size-without-downloading- файл) на самом деле интереснее ... – HamZa

ответ

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()); в конце кода, так и внутри, если заявление, чтобы увидеть что происходит.

// Edit/Update: Используя свой адрес, а также положить в вар свалку дважды:

$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) 
-1

strlen() используется для подсчета байтов, что строка приравнивает в один символ не обязательно равно 1 байт в UTF-8

Другой проблема может быть типом, поскольку PHP имеет такие правила. Будет ли это работать для вас?

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

    echo "length is 4600"; 

} 

или

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

    echo "length is 4600"; 

} 
+3

casting to' (int) 'или используя строковое обозначение делает никакой разницы в php, поскольку 'strlen()' может возвращать только целые значения –

Смежные вопросы