【问题标题】:customize curl function to support download and info header in php自定义 curl 函数以支持 php 中的下载和信息标头
【发布时间】:2015-05-01 15:07:44
【问题描述】:

您好,我在 Google 上搜索了几个小时来构建我自己的自定义 curl 函数:

输入就是一切(文件、图像、网页等的 URL...)

我有几种情况:

场景1

$url = 'an broken link or file';
$type =  null; //not important
callCurl($url,$type,10,2); 

我除了函数返回 false 因为if($curl = curl_init($url)) 但不起作用。(我用损坏的文件 url 测试它)

场景2

$url = 'an active url file';
$type =  'info'
callCurl($url,$type,10,2); 

我只是返回文件的大小,但它首先下载文件然后给我它的大小!

场景3

$url = 'an active url webpage';
$type =  'content'
callCurl($url,$type,10,2);

我除了返回下载的网页它工作。没问题!

场景4

$url = 'an active url of file or images';
$type =  'content'
callCurl($url,$type,10,2);

如何下​​载文件或图像?和scenario3一样吗?

这是函数:

//$type: info | content 
// info: for example size of file or webpages without downloading 
// content: dpwnloaded content (file/webpage/image/etc...) 
function callCurl($url,$type,$timeout,$ctimeout)
{
    if($curl = curl_init($url))
    {
        curl_setopt( $curl, CURLOPT_NOBODY, true );
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($curl, CURLOPT_HEADER, true);
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_REFERER, $url);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
        curl_setopt( $curl, CURLOPT_FOLLOWLOCATION, true );//
        curl_setopt($curl, CURLOPT_CONNECTTIMEOUT ,$ctimeout); 
        curl_setopt($curl, CURLOPT_TIMEOUT, $timeout); //timeout in seconds
        curl_setopt($curl, CURLOPT_SSLVERSION,3);    
        $str = curl_exec($curl);
        if(curl_errno($curl))
        {
            echo curl_error($curl);
            curl_close($curl);
            return false;
        }
        else
        {
            if($type == 'info')
            {
                $info['mimeType'] = curl_getinfo($curl, CURLINFO_CONTENT_TYPE);
                $info['size'] = curl_getinfo($curl, CURLINFO_CONTENT_LENGTH_DOWNLOAD);
                $info['path'] = parse_url($url, PHP_URL_PATH);
                $info['filename'] = substr($info['path'], strrpos($info['path'], '/') + 1);
                curl_close($curl);
                return $info;
            }
            elseif($type == 'content')
            {
                return $str;
            }

        }
    }
    echo "This URL IS NOT ACTIVE IT IS NOT 200";
    return false;
}

如何更改它以支持这些场景?

【问题讨论】:

  • 你在使用任何类型的框架吗?
  • 不...我用记事本++编码

标签: php curl


【解决方案1】:

对于场景1:尝试将if(curl_errno($curl))更改为if(0 != curl_errno($curl))

curl_errno 返回错误号,如果没有发生错误,则返回 0(零)。

对于场景2:您需要添加curl_setopt($ch, CURLOPT_HEADER, true)。这实际上并没有下载文件,而只是检索标题。解析返回的数据时找到Content-Length

【讨论】:

    猜你喜欢
    • 2011-12-28
    • 2016-12-31
    • 2017-01-31
    • 2013-02-16
    • 2019-01-01
    • 2011-02-01
    • 1970-01-01
    相关资源
    最近更新 更多