表单提交后新标签页打开PDF的PHP代码出现WordPress错误如何解决
WordPress表单提交后直接在新标签页打开PDF的代码修正方案
原有代码核心问题
- 字符串拼接语法错误,
Content-Disposition头的单引号包裹下PHP变量不会自动解析,同时存在引号嵌套冲突 - 未校验参数存在性,参数为空时会抛出PHP错误
- WordPress环境下未终止后续核心逻辑执行,WordPress默认输出的页面内容会破坏PDF文件结构
- 缺少基础路径安全校验,容易被利用进行路径遍历攻击
修正后可直接运行的PHP代码
<?php // 校验POST参数是否存在且不为空 if (empty($_POST['cm-f-djuiyhkr'])) { wp_die('PDF路径参数缺失'); } $pdf_path = sanitize_text_field($_POST['cm-f-djuiyhkr']); // 可选校验:只允许读取本站PDF文件,防止跨站/路径遍历风险,不需要可以删掉 if (!str_starts_with($pdf_path, ABSPATH) || pathinfo($pdf_path, PATHINFO_EXTENSION) !== 'pdf') { wp_die('非法的PDF路径'); } // 输出PDF头 header('Content-Type: application/pdf'); // 正确拼接文件名变量 header('Content-Disposition: inline; filename="' . basename($pdf_path) . '"'); header('Content-Length: ' . filesize($pdf_path)); // 清空之前的输出缓冲区,避免多余内容破坏PDF ob_clean(); flush(); // 读取PDF文件内容 readfile($pdf_path); // 终止WordPress后续逻辑执行,非常关键 exit; ?>
额外调整项
- 表单端需要给
form标签添加target="_blank"属性,才能实现提交后在新标签页打开PDF,示例如下:
<form action="你的PHP文件地址" method="post" target="_blank"> <!-- 表单其他字段 --> <input type="submit" value="提交查看PDF"> </form>
如果你的PHP代码是写在WordPress主题模板/插件钩子中的,需要确保代码执行在WordPress输出任何头部内容之前,否则会报「headers already sent」错误
内容的提问来源于stack exchange,提问作者Kyle White
相关产品推荐
相关产品推荐

