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

如何在WordPress页面中展示Perl CGI脚本的运行结果?

解决方案

方法1:让表单直接提交到页面内的iframe(最简单,无需修改CGI)

你之前的核心问题是表单参数没传递到iframe里的CGI脚本,只需给表单添加target属性指向iframe的name,就能让提交后的参数直接传给CGI,结果在页面内的iframe展示,同时保留WP页面的原有风格。

步骤:

  1. 在WP页面插入带name属性的iframe:
<iframe name="cgi-result" width="100%" height="600" style="border: none;"></iframe>

(可按需调整宽高,border: none能让iframe更贴合WP页面样式)

  1. 修改你的HTML表单,添加target="cgi-result":
<form action="/cgi-bin/test.cgi" method="POST" target="cgi-result">
  <!-- 你的表单字段:文本框、单选框等 -->
  <input type="text" name="email" placeholder="输入邮箱">
  <!-- 其他单选选项 -->
  <button type="submit">提交</button>
</form>

提交后浏览器不会跳转,参数会正常传递给CGI,结果直接在页面内的iframe中显示,不会出现“未填写邮箱”的错误(前提是表单字段name和CGI接收的字段名一致)。

方法2:用WP短代码嵌入CGI输出(无iframe,风格完全统一)

如果不想用iframe,可通过WP短代码让CGI结果直接融入WP页面,无需跳转。

子方法A:短代码转发表单请求并输出结果

在WP主题的functions.php(或用「Code Snippets」这类自定义代码插件)中添加以下代码:

function cgi_test_shortcode() {
  // 处理表单提交
  if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // 把POST参数传递给CGI脚本
    $ch = curl_init($_SERVER['DOCUMENT_ROOT'] . '/cgi-bin/test.cgi');
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $_POST);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $result = curl_exec($ch);
    curl_close($ch);
    // 返回CGI输出,WP会自动套用页面样式
    return $result;
  }
  // 未提交时显示表单
  return '<form action="" method="POST">
    <input type="text" name="email" placeholder="输入邮箱">
    <!-- 你的其他表单字段 -->
    <button type="submit">提交</button>
  </form>';
}
add_shortcode('cgi_test', 'cgi_test_shortcode');

之后在WP页面中插入[cgi_test]短代码即可。提交表单后页面刷新,CGI结果会直接显示在当前WP页面内,完全匹配网站风格。

子方法B:修改CGI输出为HTML片段(无需PHP基础)

如果你不想碰PHP,可修改Perl CGI脚本,让它只输出结果的HTML片段(去掉完整的<html>、<body>等标签):

#!/usr/bin/perl
use strict;
use CGI;

my $cgi = CGI->new;
# 接收表单参数
my $email = $cgi->param('email');
# 你的计算逻辑...

# 只输出结果片段(无需HTTP头,WP页面已提供)
print '<p>你的结果说明文本</p>';
print '<table><tr><td>计算结果</td><td>...</td></tr></table>';
print '<p>底部说明文本</p>';

之后在WP页面中用iframe加载这个修改后的CGI,就能得到无多余框架的融合效果。

关于你之前的跳转代码错误

你写的Perl跳转代码问题在于:Location HTTP头必须在所有输出前发送,且发送后必须退出脚本,否则会导致服务器错误。正确写法示例:

#!/usr/bin/perl
use strict;

# 先处理表单参数、计算结果(如需传递结果,需存在session或cookie中)
# ...

# 发送跳转头
print "Location: /your-wp-page-url\n";
print "Content-Type: text/html\n\n";
exit; # 必须退出,避免后续代码执行

但这种方法需要额外处理结果存储,对新手来说复杂度较高,更推荐前面的方法1或2。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 22:55:19