PHP:@fopen()和getimagesize():无法打开流:HTTP请求失败! HTTP / 1.0 403禁止

时间:2015-03-04 09:53:56

标签: php facebook image filestream

我正在尝试使用Facebook photos(public)fopen()验证getimagesize()图片网址 cloud9 vm, fopen()函数返回空值并且getimagesize()抛出错误

  

“无法打开流:HTTP请求失败!HTTP / 1.0 403禁止”

,这两个函数都适用于其他图像URL。

我尝试使用这两个函数来验证我的localhost wamp服务器上的Facebook图像URL,它们似乎工作正常。 {c>服务器上的 php.ini中有allow_url_fopen有可能c9 vm被Facebook阻止或者我做错了吗?

这是我的验证功能

function validateImage($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){
            if (substr($wrapper_data[$hh], 0, 19) == "Content-Type: image") // strlen("Content-Type: image") == 19
            {
                fclose($fp);
                return true;
            }
        }
    }

    fclose($fp);
    return false;
}

2 个答案:

答案 0 :(得分:0)

我使用有效的图片网址进行了测试,但fopen获得了对图片的引用(在我的情况下为id#5),而不是内容。所以我的建议是使用:       $ img = file_get_contents ($ url);

现在你能做什么:

  $img = file_get_contents($url);
  if(strlen($img) !==0) {
  echo "good";
      if(substr($img,0,3) === "\xFF\xD8\xFF"){
      echo "It's a jpg !\n";
       }
      else "other type\n";
   }

答案 1 :(得分:0)

is_file($filename) 为我工作之前添加 getimagesize($filename) 条件

if(is_file($filename) && getimagesize($filename)) {
  // your code here
}