该函数用于通过检查给定文件的head部分中的元信息来检查url是否指向有效图像。
以下代码中的echo为我提供了正确的包装数据,但在我的远程服务器上,它回应了“ArrayResource id#11”这是怎么回事?
local:PHP Version 5.3.4 远程服务器:PHP版本5.2.9
function isImage($url)
{
$params = array('http' => array(
'method' => 'HEAD'
));
$ctx = stream_context_create($params);
$fp = @fopen($url, 'rb', false, $ctx);
if (!$fp)
return false; // Problem with url
$meta = stream_get_meta_data($fp);
if ($meta === false)
{
fclose($fp);
return false; // Problem reading data from url
}
$wrapper_data = $meta["wrapper_data"];
if(is_array($wrapper_data)){
foreach(array_keys($wrapper_data) as $hh){
echo substr($wrapper_data[$hh], 0, 19);//////////////ECHO////////////////////////
if (substr($wrapper_data[$hh], 0, 19) == "Content-Type: image") // strlen("Content-Type: image") == 19
{
fclose($fp);
return true;
}
}
}
fclose($fp);
return false;
}
编辑:我调整了该函数,以便检查'Content-Type:image'是否在文件头中的某个位置。这适用于跨服务器......
function isImage($url)
{
$params = array('http' => array(
'method' => 'HEAD'
));
$ctx = stream_context_create($params);
$fp = @fopen($url, 'rb', false, $ctx);
if (!$fp)
return false; // Problem with url
$meta = get_headers($url);
if ($meta === false)
{
fclose($fp);
return false; // Problem reading data from url
}
foreach ($meta as $key => $value) {
$pos = strpos($value, 'Content-Type: image');
if($pos!==false){
fclose($fp);
return true;
}
}
fclose($fp);
return false;
}