
本文讲解 php 网站部署后 pdf 文件无法显示的常见原因,重点解决因数据库连接混用、路径错误及 html 结构破坏导致的页面截断问题,并提供安全、可移植的 pdf 链接实现方案。
本文讲解 php 网站部署后 pdf 文件无法显示的常见原因,重点解决因数据库连接混用、路径错误及 html 结构破坏导致的页面截断问题,并提供安全、可移植的 pdf 链接实现方案。
在将本地开发的 PHP 网站(如基于 XAMPP 的环境)部署至线上服务器时,常出现“PDF 不显示、后续内容全部消失”的现象。这并非 PDF 本身损坏,而是由多个典型配置与代码问题叠加所致。核心原因包括:
? 1. 混用过时且不兼容的 MySQL 扩展
原代码中同时存在:
mysql_connect(...) // 已被 PHP 7.0+ 彻底废弃,调用即致命错误 mysqli_query($conn, $sql) // 但 $conn 未定义,实际未初始化!
mysql_* 函数在绝大多数现代主机(PHP ≥ 7.0)中已被移除,调用会触发 Fatal error: Uncaught Error: Call to undefined function mysql_connect(),导致脚本立即终止——HTML 渲染中断,后续所有内容(包括 <br>、图片、标签等)均无法输出,表现为“页面截断”。
✅ 正确做法:统一使用 mysqli 或 PDO,并确保连接对象有效声明。例如:
$conn = mysqli_connect('localhost', 'adminjournal', 'adminjournalikat', 'journal');
if (!$conn) {
die("数据库连接失败: " . mysqli_connect_error());
}? 2. PDF 路径在生产环境不可访问
本地测试时 src="pdf/xxx.pdf" 可能有效,但上线后需确认:
- pdf/ 目录是否已上传至网站根目录(如 https://journal.ikatbatam.com/pdf/)?
- 该目录是否有正确的读取权限(通常 755)?
- 是否被 .htaccess 或服务器安全策略(如 deny from all)阻止访问?
✅ 推荐方案:使用绝对 URL + 显式链接替代内嵌 <embed>(更可靠、兼容性好、不阻塞渲染):
<!-- 安全、简洁、可追踪的 PDF 展示方式 -->
<h4>
<a href="https://journal.ikatbatam.com/pdf/<?php echo htmlspecialchars($pdf); ?>"
target="_blank"
rel="noopener">
▶ 下载/查看《<?php echo htmlspecialchars($title); ?>》PDF
</a>
</h4>✅ htmlspecialchars() 防止 XSS;target="_blank" + rel="noopener" 提升安全性与性能。
? 3. <embed> 标签引发的兼容性与结构风险
- <embed> 在部分浏览器或严格 MIME 类型检查的服务器下可能失败;
- 若 PDF 文件不存在或路径错误,<embed> 会渲染为破损占位符,且某些旧版浏览器可能影响后续 DOM 解析;
- 原代码中 <embed> 被置于 <div class="div1"> 内,但该 div 未闭合(缺失 </div>),直接导致 HTML 结构混乱,进一步加剧页面截断。
✅ 最佳实践:避免在文章正文中直接嵌入大型 PDF,优先提供清晰下载/查看链接。若必须内嵌,请确保:
- 使用 <iframe> 替代 <embed>(兼容性更优);
- 添加 sandbox 和 onerror 回退逻辑;
- 严格校验文件存在性:
$pdf_path = "pdf/" . basename($pdf); if (file_exists($pdf_path) && is_readable($pdf_path)) { echo '<iframe src="' . $pdf_path . '" width="100%" height="600px" frameborder="0"></iframe>'; } else { echo '<p class="text-warning">⚠ PDF 文件暂不可用,请稍后重试或联系管理员。</p>'; }
✅ 总结:上线前必查清单
| 项目 | 检查要点 |
|---|---|
| 数据库连接 | 删除所有 mysql_* 函数;使用 mysqli 并验证 $conn 初始化成功 |
| PDF 路径 | 确保 pdf/ 目录在线上可公开访问(通过浏览器直接打开 https://yoursite.com/pdf/test.pdf 测试) |
| HTML 结构 | 使用 W3C Markup Validator 检查页面,修复未闭合标签 |
| 安全输出 | 所有动态内容(如 $pdf, $title)必须经 htmlspecialchars() 过滤 |
| 错误报告 | 生产环境开启 error_reporting(0),但调试阶段建议设为 E_ALL 并查看日志 |
遵循以上方案,即可彻底解决“本地正常、线上空白”的 PDF 显示问题,同时提升代码健壮性与安全性。


















