功能无法在远程服务器上运行

时间:2011-09-21 15:15:55

标签: php

该函数用于通过检查给定文件的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;
  }

1 个答案:

答案 0 :(得分:1)

请参阅thisstream_get_meta_data可以返回多种数据类型的值。在远程服务器上,它返回一个数组。