【问题标题】:PHP - download pdf file from link and save in local file folderPHP - 从链接下载pdf文件并保存在本地文件夹中
【发布时间】:2017-10-27 06:42:04
【问题描述】:

我正在尝试通过 API、实时开放访问 pdf 文件,然后将该文件下载到我的服务器。 然而,PDF 文件不以“.pdf”扩展名结尾,而是封装在更复杂的 url 中: http://aip.scitation.org/doi/pdf/10.1063/1.4996175 Web 浏览器只会要求将其打开或保存为 PDF 文件,而我的脚本无法将其翻译为 PDF 文件。 如何让我的 PHP 脚本将此 URL 识别为 PDF 文件? 提前致谢。 奥利维尔

【问题讨论】:

  • 您是否尝试从野外下载到服务器?如果是这样,您是否尝试过简单地卷曲它?甚至file_put_contents("file.pdf",file_get_contents("URL")); 应该可以工作,但绝对不是我推荐的。
  • 我尝试过使用 Curl,但问题是 URL 本身不包含任何内容:正是此 URL 的调用导致了 PDF 的格式化

标签: php pdf


【解决方案1】:

不清楚你到底在做什么以及为什么你的 php 脚本必须识别 pdf。

如果您通过 php 应用程序加载文件 - 您可以检查文件的内容类型标头,其中包含文件类型信息以及扩展名。您可以使用http://php.net/manual/en/book.curl.php 库。

如果您想让用户下载您网站上的文件 - 您必须像这样设置正确的内容类型:

header('Content-Type: application/pdf');

现在浏览器将知道您提供的文件是 pdf,即使没有扩展名。

更新

最终发现,带有 pdf 文件的网站只需要一些 cookie,如下所述。

【讨论】:

  • 感谢您的回复。它必须识别它才能将其保存在专用文件夹中。对于带有 PDF 扩展名的文件,我使用“复制”功能,一切正常。我不希望用户保存文件,这不是目标。
  • 您能否提供一行代码,但无法澄清问题? Like copy('http://aip.scitation.org/doi/pdf/10.1063/1.4996175', './somefile.pdf'));
  • 这里是代码部分:code if ($urlPDF != "")//第一种方法找到的PDF URL { if (!copy($urlPDF, './PDF/' .$titPDF.'.pdf', $context)) { //echo('无法复制文件'); }else{ //echo (mime_content_type('./PDF/'.$titPDF.'.pdf').'
    '); if(mime_content_type('./PDF/'.$titPDF.'.pdf') != "application/pdf") {//删除文件 unlink('./PDF/'.$titPDF.'.pdf') ; } } } code
  • 当我尝试自己复制文件时,在下载的副本中我发现:
【解决方案2】:

你可以这样做:

<a href="http://aip.scitation.org/doi/pdf/10.1063/1.4996175" download="sample.pdf" id="pdf_file">Download PDF</a>

如果您想在页面上不显示锚标记的情况下进行自动下载,那么您可以设置 JavaScript 或 Jquery 代码。为此,请将display:none; 设置为锚标记,然后您可以使用jquery 触发click 事件,如下所示:

$(document).ready(function(){
    $('#pdf_file').trigger('click');
};)

所以它会在页面加载时开始下载文件。

如果您想获取文件并将其存储在您的服务器上,那么您可以这样做:

file_put_contents("sample.pdf",file_get_contents("URL"));

您可以使用绝对路径而不是仅使用文件名,并且您可以将文件存储在服务器的定义文件夹中。

【讨论】:

  • 感谢您的回复。我试过了,但下载没有开始。另外,我想要的是我的服务器接收下载,就好像它是用PHP函数'copy'
  • @OTroccaz,我现在更新了我的答案。看看吧。
  • 我测试过:我恢复的不是PDF,而是类似于网站aip.scitation.org搜索引擎的页面的html代码
【解决方案3】:

@Oleg Loginov,你是对的:只需在上下文中添加一个 cookie,然后通过复制命令很好地上传 PDF。

$context = stream_context_create(array(
  'http'=>array(
    'method'=>"GET",
    'header'=>"Accept-language: en\r\n" .
              "User-Agent: Mozilla/5.0 (Windows NT 6.0; rv:8.0) Gecko/20100101 Firefox/8.0\r\n" .
              "Cookie: foo=bar\r\n"
  )
));

非常感谢!

【讨论】:

    猜你喜欢
    • 2012-12-26
    • 2021-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-25
    • 2014-02-26
    • 2021-10-01
    相关资源
    最近更新 更多