PHP:@fopen()和getimagesize():无法打开流:HTTP请求失败!HTTP/1.0 403禁止
我试图在cloud9 vm上使用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
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与网桥连接等)。