文件下载未保存到下载文件夹

时间:2013-10-27 08:44:15

标签: php web-services curl download wamp

我希望从我的网络服务器下载包含下载进度信息的文件。为此, PHP cURL 似乎是最佳选择。

但是,我很难将下载的文件放入 Downloads 文件夹中,其中通常会下载所有网络文件。我使用以下文件下载例程:

$fp = fopen(dirname(__FILE__) . 'uploaded.pdf', 'w+');
$url = "file:///D:/WEB/SAIFA/WWW/PickUpTest.pdf";    
$ch = curl_init(str_replace(" ","%20", $url));
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_BUFFERSIZE, 1024*8);
curl_setopt($ch, CURLOPT_NOPROGRESS, false );
curl_setopt($ch, CURLOPT_PROGRESSFUNCTION, 'progressCallback' );
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0);
curl_setopt( $ch, CURLOPT_FILE, $fp );
curl_exec( $ch );
curl_close($ch);
fclose($fp);
unset($fp);

我的问题是,而是 Downloads 文件夹,该文件被静默下载到我的WWW文件夹中,其中包含此cURL文件的PHP脚本驻留在该文件夹中。我既没有文件下载另存为对话框。

要强制另存为对话框,我在脚本的开头添加了以下标题:

header("Content-Disposition: attachment; filename=\"uploaded.pdf\"");
$fp = fopen(dirname(__FILE__) . 'uploaded.pdf', 'w+');
...

使用标题后,我得到了“另存为”对话框,然而,该文件仍然使用我的PHP脚本静默下载到该文件夹​​中。在Downloads文件夹中,保存文件大小为0的文件'uploaded.pdf'。

我的问题是,如何让PHP cURL正确下载文件并将它们放入 Downloads 文件夹并提供另存为对话框?

我用:

  • WAMP
  • Windows 7
  • PHP Version 5.4.12
  • 卷曲版本7.29.0

1 个答案:

答案 0 :(得分:2)

通过使用file函数,您实际上要求服务器保存文件,以便cURL调用的结果在PHP文件夹中结束。

如果我理解了这个问题,你真正想要的是将cURL的结果发送回浏览器。通过发送header(...) - 您可以让用户的浏览器知道文件即将到来并且应该下载,您已经到了一半了,您错过的步骤是发送带有标题的cURL数据。

您可以在保存文件后回显该文件的内容,或者更有效地(假设您不需要文件的额外副本),删除代码以在本地保存文件并删除cURL选项{ {1}}。这将告诉cURL直接发送输出,因此它将成为下载的数据。

希望有所帮助!

编辑抓取本地文件(CURLOPT_RETURNTRANSFER)并将其发送到用户浏览器(C:\test.pdf)的简单示例。

uploaded.pdf

希望有所帮助!