如何将 FPDI SetSourceFile 与重定向的 URL 一起使用? 方案一:手动打开一个流方案二:下载文件

问题描述

我的服务器上有一个 PDF 文件,我想将其用作此函数的参数:

$fpdi->setSourceFile()

问题是用作源的链接重定向到另一个 URL,而我不知道最终 URL。 似乎 setSourceFile 需要真正的 PDF 文件名。 有没有办法获取最终的URL,然后将其作为参数传递?

解决方法

我根据您在评论中给出的解释编辑了您的问题。这与重写无关,与 URL 重定向有关。

方案一:手动打开一个流

我查看了此特定函数的 source code,它期望接收文件名或流。您可以手动获取 PDF 链接,处理重定向并将最终 Stream 传递给此函数:

$stream = fopen('https://example.com/12/PDF','rb',false,stream_context_create());

$fpdi->setSourceFile($stream);

如果需要,您可以在 stream_context_create 函数中调整标题和其他参数,例如 cookie。远程服务器很可能在重定向到最终 URL 之前需要 cookie 或其他东西。

方案二:下载文件

如果您将链接传递给此函数,它会将其识别为 Stringtry to open it as a file。由于您声明传递不重定向的链接有效,您的服务器允许函数 fopen() 打开外部链接。如果是这种情况,您可以简单地使用普通文件功能将 PDF 临时下载到本地文件夹:

// saves the file locally
file_put_contents('localFile.pdf',file_get_contents('https://example.com/12/PDF'));

// do what you need to do with it
$fpdi->setSourceFile('localFile.pdf');

// deletes the file after using it
unlink('localFile.pdf');