我正在尝试使用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;
}
答案 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
}