Php 如果内容类型错误,则中止卷曲下载

Php 如果内容类型错误,则中止卷曲下载,php,curl,content-type,Php,Curl,Content Type,我正在建立一个网站,在那里用户可以发布链接,curl(php)将抓取url,并根据元数据、打开的图形标记等格式化内容。我已将其设置为使用multi_init和multi_exec同时运行上传。我为这门课做了一个要点,它应该做的是: 从多个URL获取元数据 返回一个json字符串,但仅用于内容类型为“text/html”的页面(因此不必直接链接到图像、js、可执行文件等) 问题似乎是对CURLOPT_HEADERFUNCTION的回调。我认为当内容类型头存在但不是html头时,让它返回-1将中

我正在建立一个网站,在那里用户可以发布链接,curl(php)将抓取url,并根据元数据、打开的图形标记等格式化内容。我已将其设置为使用multi_init和multi_exec同时运行上传。我为这门课做了一个要点,它应该做的是:

  • 从多个URL获取元数据
  • 返回一个json字符串,但仅用于内容类型为“text/html”的页面(因此不必直接链接到图像、js、可执行文件等)
问题似乎是对CURLOPT_HEADERFUNCTION的回调。我认为当内容类型头存在但不是html头时,让它返回-1将中止下载,但它似乎没有做任何事情(尽管检查似乎正确并且似乎返回-1)。它似乎仍然允许任何内容类型通过

下面是回调函数:

CURLOPT_HEADERFUNCTION  => function($ch, $header){

// if they're sending a content-type header, it must be text/html
 if(stripos(trim($header), "Content-Type") === 0){  

 list($key, $val) = explode(":", $header);

 if(stripos(trim($val), "text/html") === 0){
    return strlen($header);
  }
  else{
    return -1;
  }
}
else{ 
    return strlen($header);
}
}
我试图关闭curl\u close,但在回调中关闭curl时出错。有什么建议吗

使用回调设置(全局)变量。如果为false,则跳过
curl\u exec()
调用

$htmlheader = true;
function header_callback($ch, $headers)
{
    $GLOBALS['htmlheader']=false;
}
$ch = curl_init('http://www.example.com/');
curl_setopt($ch,CURLOPT_HEADERFUNCTION,  'header_callback');
if($htmlheader)
{
    $result = curl_exec($ch);
}   
curl_close($ch);
使用回调设置(全局)变量。如果为false,则跳过
curl\u exec()
调用

$htmlheader = true;
function header_callback($ch, $headers)
{
    $GLOBALS['htmlheader']=false;
}
$ch = curl_init('http://www.example.com/');
curl_setopt($ch,CURLOPT_HEADERFUNCTION,  'header_callback');
if($htmlheader)
{
    $result = curl_exec($ch);
}   
curl_close($ch);

我不得不改变一些事情,使其与multi_exec一起工作(主要使用数组而不是单个全局),但这确实有效,谢谢。我用这个类的工作版本更新了上面的要点。为了让它与multi_exec(主要使用一个数组而不是一个全局数组)一起工作,我不得不做一些更改,但这确实有效,谢谢。我用课堂的工作版本更新了上面的要点。