调用Ilovepdf API合并PDF时提示文件不存在但URL可正常访问
问题根因
- 你当前调用的
addFile方法是iLovePDF PHP SDK专门用于读取本地服务器文件的接口,该方法会优先在你部署代码的服务器磁盘路径下查找传入的字符串对应的文件,你传入公网URL时它会把URL当作本地文件路径解析,自然会抛出文件不存在的错误。 - 排除SDK调用方式问题的话,还有几个次要可能原因:
- 你的服务器配置了IP封禁/CDN防护规则,iLovePDF服务的出站请求IP被拦截,无法正常拉取你的PDF文件
- PDF的访问需要鉴权(如登录会话、Basic Auth校验),你本地浏览器因为保留了登录态可以正常访问,但iLovePDF的请求没有携带对应凭证被拦截
- URL包含未转义的特殊字符(中文、空格、特殊符号等),SDK调用时没有正确编码导致请求路径异常
修复方案
- 优先修改调用方法:将
addFile替换为SDK提供的专门用于加载公网URL文件的addFileFromUrl方法,修改后的代码参考:
$ilovepdf = new Ilovepdf($_ENV['ILOVEPDF_PUBLIC'], $_ENV['ILOVEPDF_SECRET']); // 创建合并任务 $myTaskMerge = $ilovepdf->newTask('merge'); // 拼接文件地址 $urlPagadoria = $_SESSION['urlPagadoria']; $arq = $urlPagadoria . '/uploads/Pagamentos/' . $arquivo; // 改用addFileFromUrl加载公网URL文件 $file1 = $myTaskMerge->addFileFromUrl($arq); $arq2 = $urlPagadoria . '/Arquivo.pdf'; $file2 = $myTaskMerge->addFileFromUrl($arq2); // 执行任务 $myTaskMerge->execute(); // 下载合并后的文件 $myTaskMerge->download();
- 如果修改方法后仍然报错,按以下步骤排查:
- 检查服务器/CDN的访问控制规则,将iLovePDF的官方出站IP段加入白名单
- 确认PDF路径是否需要鉴权,可生成临时无鉴权的签名URL供iLovePDF拉取,或者先将PDF下载到本地服务器临时目录,再用
addFile传入本地路径调用 - 检查URL是否存在特殊字符,对路径中的非ASCII字符和特殊符号做urlencode处理
内容的提问来源于stack exchange,提问作者Vanessa Lemos
相关产品推荐
相关产品推荐

