$url 文件地址 $directory 保存目录 $contractId 文件名(自定义)
$filePath 两种命名方式,一种从$url获取,一种自定义
public function downloadFileSimplified($url, $directory,$contractId)
{
// 提取并转换文件名
$fileName = basename($url);
$safeFileName = iconv("UTF-8", "GB2312//IGNORE", urldecode($fileName));
$filePath = rtrim($directory, '/file/') . DIRECTORY_SEPARATOR . $safeFileName;
$filePath = $directory.$contractId;
$file = @fopen($filePath, 'w+');
if (!$file) {
return "Error:无法创建文件。";
}
// 初始化cURL
$ch = curl_init($url);
if (!$ch) {
fclose($file);
return "Error:无法初始化cURL。";
}
// 设置cURL选项
curl_setopt_array($ch, [
CURLOPT_FILE => $file,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_SSL_VERIFYPEER => false, // 生产环境中建议开启
CURLOPT_SSL_VERIFYHOST => false, // 生产环境中建议开启
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_TIMEOUT => 30,
]);
// 执行请求并检查结果
$success = curl_exec($ch);
$error = curl_error($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
// 清理资源
curl_close($ch);
// 关闭文件
fclose($file);
// 根据执行结果处理
if ($success === false) {
unlink($filePath); // 删除可能已写入的文件
return "error:" . $error;
}
if ($httpcode !== 200) {
unlink($filePath);
return "下载失败,HTTP状态码 $httpcode";
}
return "下载成功:" . $filePath;
}