You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

网站PDF下载链接异常:下载index.php的HTML文件而非目标PDF

问题分析与解决方案

核心问题定位

你的PDF下载功能本地正常,但上线GoDaddy后跳转到index.php纯HTML内容,大概率是路径解析错误、Header输出问题或GoDaddy服务器重写/配置限制导致,以下是针对性修复步骤:


1. 修复文件路径解析错误(最可能原因)

GoDaddy的网站根目录是public_html,PHP脚本默认工作目录是当前脚本所在文件夹(比如你的downloadpdf.php在public_html/prints下),直接使用数据库返回的相对路径会导致PHP找不到文件,触发服务器默认错误处理(返回index.php)。

修复代码:

修改downloadpdf.php中获取文件路径的逻辑,拼接服务器根目录:

// 替换原来的$file_path = getExtensionFromID(...)
$relative_path = getExtensionFromID($pdo, $recordID);
// 拼接服务器根目录,确保路径绝对正确,同时去掉可能的开头斜杠避免重复
$file_path = $_SERVER['DOCUMENT_ROOT'] . '/' . ltrim($relative_path, '/');

// 先检查文件是否存在,避免报错
if (!file_exists($file_path)) {
    die("文件不存在:" . $file_path); // 调试用,上线后可替换为友好提示
}

同时确认数据库中extension字段的路径:

  • 若PDF文件在public_html/documents下,字段值应为documents/xxx.pdf(不要带开头的/或../)

2. 修复重复输出与Header问题

你的代码同时使用readFile($file_path)和fopen+fread输出文件内容,会导致重复输出并干扰Header发送;另外未启动Session会导致权限判断逻辑失效,触发跳转。

修复代码:

  1. 在downloadpdf.php最开头添加Session启动代码:
<?php
session_start(); // 必须在所有输出前启动Session
include ("downloadpdf_model.php");
include ("dbh.inc.php");
  1. 删除重复的文件输出代码,保留简洁的readFile:
// 保留正确的Header和readFile,删掉后面的fopen循环
header("Content-Type: application/pdf"); 
header("Content-Disposition: attachment; filename=" . urlencode(basename($file_path)));    
header("Content-Description: File Transfer");             
header("Content-Length: " . filesize($file_path)); 
readFile($file_path);
exit(); // 执行后立即退出,避免后续无关输出

注意:Header中Content-Type统一用application/pdf即可,无需重复设置application/octet-stream和application/download


3. 检查.htaccess重写规则

GoDaddy默认的.htaccess可能包含伪静态规则,将不存在的文件请求重定向到index.php。检查public_html/.htaccess:
若存在以下规则,确保downloadpdf.php确实存在且路径正确:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [L]

如果脚本路径正确但仍被拦截,可在规则中添加例外:

RewriteCond %{REQUEST_URI} !^/prints/downloadpdf.php$

4. 调试技巧(快速定位问题)

在downloadpdf.php开头添加错误输出,直接查看具体报错:

ini_set('display_errors', 1);
error_reporting(E_ALL);

上线后记得关闭错误输出,替换为友好提示。


5. 其他注意事项

  • 文件权限:PDF文件权限设为0644,文件夹权限0755即可,无需更高权限
  • 检查include文件:dbh.inc.php和downloadpdf_model.php开头/结尾不要有多余的空格、换行或UTF8 BOM,否则会在Header前输出内容,导致Header发送失败
  • 权限判断逻辑:检查$_SESSION['print-id']是否为笔误,应该是检查用户登录状态(比如$_SESSION['user_id']),否则会触发无意义的跳转

内容的提问来源于stack exchange,提问作者BrAirTec

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 02:35:01