我需要从url下载一个zip文件到我的服务器,这是动态生成的,这意味着url中没有扩展名。 zip文件将由网址生成。我们需要将该zip文件保存在服务器中。
我试过了。
function DownloadFile($reportDownloadUrl, $downloadPath) {
$reader = fopen(urldecode($reportDownloadUrl), 'rb') or die("url cannot open");
if (!file_exists($downloadPath)) {
die('File does not exist');
}
$writer = fopen($downloadPath, 'wb') or die("cannot open file");
if (!$reader) {
throw new Exception("Failed to open URL " . $reportDownloadUrl . ".");
}
if (!$writer) {
fclose($reader);
throw new Exception("Failed to create ZIP file " . $downloadPath . ".");
}
$bufferSize = 10 * 1024;
while (!feof($reader)) {
if (false === ($buffer = fread($reader, $bufferSize))) {
fclose($reader);
fclose($writer);
throw new Exception("Read operation from URL failed.");
}
if (fwrite($writer, $buffer) === false) {
fclose($reader);
fclose($writer);
$exception = new Exception("Write operation to ZIP file failed.");
}
}
fclose($reader);
fflush($writer);
fclose($writer);
}
通过使用此我可以下载具有扩展名.zip文件的文件,但我无法下载没有扩展名的文件。我一直在努力想出这个问题,必须有办法,任何建议都非常感激。
提前谢谢。
答案 0 :(得分:1)
可能有几个原因导致您无法下载不带代码扩展名的网址。您的代码旨在从直接链接读取,但有时可能会在此之前进行重定向,或者除非您发送某些cookie,用户代理,引荐来源等,否则可能无法直接访问该文件。
出于这个原因,我建议您查看cURL library。它提供了一组功能,使您可以轻松执行上述所有任务。这是一个模仿您的DownloadFile函数的代码段,但它遵循重定向:
function DownloadFile($reportDownloadUrl, $downloadPath) {
{
$ch = curl_init($reportDownloadUrl);
$fh = fopen($downloadPath, 'ab');
if($fh === false)
throw new Exception('Failed to open ' . $downloadPath);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_FILE, $fh); // file handle to write to
$result = curl_exec($ch);
if($result === false) // it's important to check the contents of curl_error if the request fails
throw new Exception('Unable to perform the request : ' . curl_error($ch));
}
cURL包含许多很酷的选项,例如恢复文件下载,上传数据,使用代理等。您可以在手册中阅读所有相关内容:http://php.net/curl-setopt
关于您的代码的更多内容: