
本文解决 php 网站部署到线上服务器后 pdf 文件无法显示、后续内容丢失的问题,核心在于修复数据库连接混用、资源路径错误及 html 结构破坏等常见部署陷阱。
本文解决 php 网站部署到线上服务器后 pdf 文件无法显示、后续内容丢失的问题,核心在于修复数据库连接混用、资源路径错误及 html 结构破坏等常见部署陷阱。
在本地(XAMPP)运行正常的 PDF 展示功能,上线后突然失效——页面在 PDF 相关代码处“截断”,后续图文、标签、分享按钮全部消失——这并非 PDF 渲染失败,而是PHP 执行异常导致 HTML 输出中断,浏览器收到不完整 HTML,从而渲染异常或静默失败。
根本原因有三:
混用过时的 mysql_* 函数与 mysqli_* 函数
你的代码中同时出现了已彻底废弃且在 PHP 7.0+ 中被移除的 mysql_connect() / mysql_select_db(),以及仍在使用的 mysqli_query()。这会导致致命错误(Fatal error: Uncaught Error: Call to undefined function mysql_connect()),PHP 脚本立即终止,后续 HTML 不再输出——正是页面“后面内容全丢”的直接原因。数据库连接变量未定义或未复用
mysqli_query($conn, $sql) 中的 $conn 变量从未初始化,而你又尝试用已删除的 mysql_* 函数建立连接,造成查询完全失败,且无错误提示(尤其当 display_errors = Off 时)。硬编码路径与环境不匹配
本地 pdf/xxx.pdf 路径在线上可能因目录结构、域名或权限差异失效;更严重的是,直接使用
✅ 正确做法(推荐方案):
- ✅ 统一使用 mysqli 或 PDO 进行数据库操作(mysql_* 已废弃多年,必须移除);
- ✅ 确保连接对象 $conn 显式创建并校验;
- ✅ PDF 不再内联渲染,改为安全、可追踪的超链接(如答案所示),兼顾兼容性、性能与用户体验;
- ✅ 路径使用绝对 URL 或 base_url() 动态拼接,避免相对路径歧义。
以下是修正后的安全、可部署代码片段(兼容 PHP 7.4+ / 8.x):
<?php // ✅ 使用 mysqli 面向对象方式建立连接(请替换为你的线上数据库凭证)
$host = 'localhost';
$username = 'adminjournal';
$password = 'adminjournalikat';
$database = 'journal';
$conn = new mysqli($host, $username, $password, $database);
if ($conn->connect_error) {
error_log("DB Connection failed: " . $conn->connect_error);
die("Database connection error. Please try again later.");
}
// ✅ 查询单篇文档的 PDF 字段(注意:此处应基于当前文章 ID,而非全表遍历)
$sql = "SELECT pdf FROM tbl_blog_posts WHERE id = ?"; // 假设 $post_id 已从 URL 或上下文获取
$stmt = $conn->prepare($sql);
$stmt->bind_param('i', $post_id); // 替换 $post_id 为实际变量
$stmt->execute();
$result = $stmt->get_result();
if ($result->num_rows > 0 && $row = $result->fetch_assoc()) {
$pdf_filename = trim($row['pdf']);
if (!empty($pdf_filename) && filter_var($pdf_filename, FILTER_SANITIZE_STRING)) {
// ✅ 使用绝对 URL 确保路径可靠(假设 PDF 存于 https://journal.ikatbatam.com/pdf/)
$pdf_url = "https://journal.ikatbatam.com/pdf/" . urlencode($pdf_filename);
?>
<div class="pdf-link-section mt-4">
<h4>? Journal PDF Document</h4>
<p>
<a href="<?php%20echo%20htmlspecialchars(%24pdf_url);%20?>" target="_blank" rel="noopener noreferrer" class="btn btn-primary">
<i class="feather icon-file-text"></i> Open PDF: <?php echo htmlspecialchars($title); ?></a>
</p>
</div>
<?php }
}
$stmt->close();
$conn->close();
?>
? 关键注意事项:
- 永远不要在生产环境启用 display_errors = On —— 错误信息可能泄露敏感配置。改用 error_log() 记录日志,并通过服务器日志排查;
- PDF 文件需放置在 Web 可访问目录(如 public_html/pdf/),并确保文件权限为 644,目录为 755;
- 对用户输入(如 $pdf_filename)务必过滤与转义(urlencode() + htmlspecialchars()),防止 XSS 或路径遍历攻击;
- 若需预览 PDF,建议使用 PDF.js(Mozilla 官方开源库),而非
通过以上重构,不仅解决了“页面截断”问题,更将代码升级为现代、健壮、可维护的标准实践——一次修复,长期受益。











