【问题标题】:php force download pdf from a dynamic link and store to local folderphp强制从动态链接下载pdf并存储到本地文件夹
【发布时间】:2012-12-26 07:02:47
【问题描述】:

我正在构建一个脚本,将 imap 放入谷歌邮箱,获取一条消息,并从正文中提取一个链接。该链接在通过 php 打开时会启动从外部源下载 PDF 文件的过程。

这是我需要做的:

  1. 以编程方式打开启动下载的链接
  2. 下载 PDF,显然绕过任何对话框
  3. 将 PDF 文件存储到 Web 服务器上的本地文件夹中

我已经成功启动下载过程并下载文件。但是,每次打开 PDF 的尝试都会发现文件已损坏,我不知道为什么。这就是我现在正在尝试的。以下内容基于类似主题。

    $filename =  http://cckk.ca/KE645R26/geico.com_SEO_Domain_Dashboard_20121101_00.pdf

    header('Content-Description: File Transfer');
    header('Content-Type: application/pdf');
    header('Content-Disposition: attachment; filename="' . basename($filename) . '"');
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Pragma: public');
    header('Content-Length: ' . filesize($filename));
    ob_clean();
    flush();
    readfile($filename);
    exit;

我在想我传递的文件名可能有问题?

注意:此脚本将设置为每隔几秒在服务器上运行的 CRON 任务,以便不断从我们自己的邮箱中获取,因此不会有任何类型用户交互或对用户构成安全风险。

【问题讨论】:

  • 让我编辑脚本目的来澄清这个问题...
  • 对不起,现在很清楚你想要做什么。我起初以为本地,你的意思是本地人通过浏览器的硬盘,但我现在看到你说的是网络服务器。我认为你应该看看 PHP 的 curl 函数来获取远程文件。
  • 但是从我所看到的一切来看,示例使用 Content Headers 来获取文件,或者我的应用程序不是出于同样的目的?
  • 使用内容标题将文件输出到浏览器(或其他为该内容类型发出请求的东西)。如果你只是获取一个远程文件,然后在本地写入,则不需要发送任何标题。
  • @crush 是的,但他确实需要header('Content-Disposition: attachment; ... 来提示下载。

标签: php pdf download mime-types


【解决方案1】:

试试:

$filename = 'http://cckk.ca/KE645R26/geico.com_SEO_Domain_Dashboard_20121101_00.pdf';

file_put_contents(
    '/your/server/path/folder/' . basename($filename), // where to save file
    file_get_contents($filename)
);

exit;

【讨论】:

  • 给你支票,因为从技术上讲,你是唯一有答案的人:)
【解决方案2】:

您不能对远程文件使用 filesize()。最有可能的是,该调用的错误出现在文件的开头并因此损坏了它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-03
    相关资源
    最近更新 更多