Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:@fopen()和getimagesize():无法打开流:HTTP请求失败!HTTP/1.0 403禁止_Php_Facebook_Image_Filestream - Fatal编程技术网

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

PHP:@fopen()和getimagesize():无法打开流:HTTP请求失败!HTTP/1.0 403禁止,php,facebook,image,filestream,Php,Facebook,Image,Filestream,我试图在cloud9 vm上使用fopen()和getimagesize()验证Facebook照片(公共)图像URL,fopen()函数返回空值,getimagesize()抛出错误 “无法打开流:HTTP请求失败!HTTP/1.0 403被禁止” ,这两个函数都适用于其他图像URL 我已经尝试使用这两个函数在我的本地主机wamp服务器上验证Facebook图像URL,它们似乎工作正常allow_url\u fopen在c9服务器的php.ini中处于启用状态,c9虚拟机是否可能被Facebo

我试图在cloud9 vm上使用
fopen()
getimagesize()
验证
Facebook照片(公共)
图像URL,
fopen()
函数返回空值,getimagesize()抛出错误

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

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

我已经尝试使用这两个函数在我的本地主机wamp服务器上验证Facebook图像URL,它们似乎工作正常
allow_url\u fopen
在c9服务器的php.ini中处于启用状态,c9虚拟机是否可能被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;
}

我使用一个有效的图像url进行了测试,但是fopen得到的是一个图像的引用(在我的例子中是id#5),而不是内容。因此,我的建议是使用: $img=文件获取内容($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";
   }
getimagesize($filename)
之前添加
is\u文件($filename)
条件对我很有效

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

我正在通过HTTPS开发应用程序,所以我想这不是问题所在!file_get_contents()函数也会抛出相同的错误“无法打开流:HTTP请求失败!HTTP/1.0 403禁止”。如果两者都失败并出现错误403,则表明您的VM在访问连接时出现问题。如果curl出现错误,那么您必须检查连接外部的规则(如防火墙、nat与网桥连接等)。