上代码,配合递归创建文件夹使用,也可根据自己需求进行修改
/**
* 通过CURL下载文件
*
* @param string $strFileUrl 文件下载地址
* @param string $strSaveFilePath 保存文件路径,例如 /a/a/a
* @param string $strSaveFileName 保存文件名,必须带后缀,例如 xxx.zip
* @return void
* @author 一颗大萝北 [email protected]
*/
function downFile($strFileUrl, $strSaveFilePath, $strSaveFileName)
{
if (!is_dir($strSaveFilePath)) dgMkdir($strSaveFilePath); //第一次检查,文件不存在就创建
if (!is_dir($strSaveFilePath)) return [‘ok’ => false, ‘msg’ => ‘文件夹不符合规定,LINUX下如果存在同名文件且不为文件夹时会无法创建文件夹’]; //第二层检查,防止创建出错
$objCurl = curl_init();
curl_setopt($objCurl, CURLOPT_URL, $strFileUrl);
$objFp = fopen($strSaveFilePath . $strSaveFileName, ‘w+’);
curl_setopt($objCurl, CURLOPT_FILE, $objFp);
curl_setopt($objCurl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($objCurl, CURLOPT_TIMEOUT, 50);
curl_exec($objCurl);
curl_close($objCurl);
fclose($objFp);
if (is_file($strSaveFilePath . ‘/’ . $strSaveFileName)) return [‘ok’ => true, [‘msg’ => ‘success’]];
return [‘ok’ => false, [‘msg’ => ‘fail’]];
}
完整代码
downFile('url','/www/a/b/c/d','1.zip');
/**
* 通过CURL下载文件
*
* @param string $strFileUrl 文件下载地址
* @param string $strSaveFilePath 保存文件路径,例如 /a/a/a
* @param string $strSaveFileName 保存文件名,必须带后缀,例如 xxx.zip
* @return void
* @author 一颗大萝北 [email protected]
*/
function downFile($strFileUrl, $strSaveFilePath, $strSaveFileName)
{
if (!is_dir($strSaveFilePath)) dgMkdir($strSaveFilePath); //第一次检查,文件不存在就创建
if (!is_dir($strSaveFilePath)) return [‘ok’ => false, ‘msg’ => ‘文件夹不符合规定,LINUX下如果存在同名文件且不为文件夹时会无法创建文件夹’]; //第二层检查,防止创建出错
$objCurl = curl_init();
curl_setopt($objCurl, CURLOPT_URL, $strFileUrl);
$objFp = fopen($strSaveFilePath . $strSaveFileName, ‘w+’);
curl_setopt($objCurl, CURLOPT_FILE, $objFp);
curl_setopt($objCurl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($objCurl, CURLOPT_TIMEOUT, 50);
curl_exec($objCurl);
curl_close($objCurl);
fclose($objFp);
if (is_file($strSaveFilePath . ‘/’ . $strSaveFileName)) return [‘ok’ => true, [‘msg’ => ‘success’]];
return [‘ok’ => false, [‘msg’ => ‘fail’]];
}
/**
* 递归创建文件夹,不允许携带文件名
*
* @param [type] $strPath 文件夹路径
* @param integer $intDepth 给递归用的,必须是0
* @param string $strThisPath 给递归用的,必须是””
* @return void
* @author 一颗大萝北 [email protected]
*/
function dgMkdir($strPath, $intDepth = 0, $strThisPath = “”)
{
$arrPath = explode(‘/’, $strPath);
if (!empty($strThisPath)) {
$strThisPath .= ‘/’ . $arrPath[$intDepth];
} else {
$strThisPath = $arrPath[$intDepth];
}
if (is_dir($strThisPath)) {
$intDepth++;
if ($intDepth < count($arrPath)) {
dgMkdir($strPath, $intDepth, $strThisPath);
}
} else {
mkdir($strThisPath, 0777);
$intDepth++;
if ($intDepth < count($arrPath)) {
dgMkdir($strPath, $intDepth, $strThisPath);
}
}
}
声明:
本文采用
BY-NC-SA
协议进行授权,如无注明均为原创,转载请注明转自
一颗大萝北
本文地址: PHP 通过CURL 下载文件
本文地址: PHP 通过CURL 下载文件