gpt4 book ai didi

php - 自定义 curl 函数以支持 php 中的下载和信息头

转载 作者:搜寻专家 更新时间:2023-10-31 22:00:29 24 4
gpt4 key购买 nike

你好,我用谷歌搜索了几个小时来构建我自己的自定义 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;
}

我怎样才能改变它以支持那些 senarios?

最佳答案

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

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

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

关于php - 自定义 curl 函数以支持 php 中的下载和信息头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29989463/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com