在网页中如何加入调用c写的cgi程序?

时间:2022-05-27 04:58:33
<label>
 姓名
 <input name="name" type="text" id="name">
</label>
<p align="center"> </p>
<form name="saveenvironment" method="post" action="/cgi-bin/newcgitest.cgi">
  <label>
  <input type="submit" name="saveenvironment" value="保存环境变量">
  </label>
</form>
</body>
 

  这样可以提交text中的内容吗?谢谢

16 个解决方案

#1


当然不可以,一定要在<form>  </form>之间的才可以提交。

#2


你可以改成这样:
<form method="post" action="/cgi-bin/newcgitest.cgi">
  姓名
  <input name="name" type="text" id="name">
  <input type="submit" name="saveenvironment" value="保存环境变量">
</form>

CGI 程序("/cgi-bin/newcgitest.cgi")可以类似下面的 CSP 代码: 

<html>
<body>
你输入的是: <% getParameter("text") %>
<body>
</html>

用工具 csp2bin 可以将上面的代码轻松转化成 C 代码.
用 C 写 CGI 就要到 http://www.eybuild.com 看看.
中文手册: http://www.eybuild.com/develop/doc/manual/eyBuild_manual_ch.pdf

#3


谢谢两位的帮助,刚开始写cgi,有些是比较弱智的问题,可还找不出来,呵呵
我用的cgic的库,挺方便的。
 csp2bin我试过,可解压make后,启动csp2bin提示权限不够,我是root登录的,怎么还不够???
  稍后揭帖。

#4


这个问题我也遇到过, 后来发现 bin目录中的csp2bin的执行权限没有设置, 除此以外还有bin/web2bin, bin/donempa.unix, demo/demo.unix

这个压缩包在 windows上也能用, 我猜可能的原因是这样的: 
作者可能是在 Windows 上打的压缩包, 因为这个包是 For Linux 和 Windows两个平台的, 所以在 Linux 上解开后必须手动改下它们的执行权限. 

你可以按下面的步骤试试:
1. 解压到目录, 如 eyBuild
2.  eyBuild改变权限 
chmod +x bin/web2bin
chmod +x bin/csp2bin
chmod +x bin/donemap.unix
chmod +x demo/demo.unix

3. 设置环境变量(Linux可以加到 ~/.bash_profile中, 重新登录后进行下步)
EYBUILD_BASE=$HOME/eybuild
export EYBUILD_BASE

4. 编译 demo 试例
cd demo
./demo.unix
make

demo.unix 脚本里会调用 csp2bin 这个工具
在 eybuild 的中文手册里对它有描述, 
你可看看这个地址 http://www.eybuild.com/develop/doc/manual/eyBuild_manual_ch.pdf

运行完后你会发现:
有个 cspsrc 目录生成, 这里面就是生成的中间 C 文件
在一个新的文件 demo.cgi 生成了, 它就是最终执行CGI文件

Linux 平台下使用方法跟在 Windows 下的使用方法差不多 

祝你好运!

#5


非常感谢yangyouyi(yangyouyi)和haolee(haohao)的帮助。 
  不过我用的是cgic库,很方便的,没有用csp。
  http://www.boutell.com/cgic/
我照haolee(haohao)的方法做了,但运行./demo.unix时却提示没有/bin/donemap.unix这个文件及文件夹,可bin中有这个文件啊,权限也改了,可以运行的。为什么会有这样的问题呢?

#6


linux下apache的权限是nobody,不是root,建议需要用到system之类的命令就别在cgi里面写,自己写个守护进程来做。如果非要把apache改成root,可以找找以前的资料,记得以前我好像写过,不过找不到,建议还是别改,很危险。

#7


to elc_hall:
非常报歉, 昨天的输入错了一个字符(应该是大写的"B", 因为包解压开时生成的是eyBuild目录)
   EYBUILD_BASE=$HOME/eybuild 中的 eybuild 改为 eyBuild

你必须将环境变量 EYBUILD_BASE 正确地设置到你的目录, 当然也可以使用绝对路径, 否则就会引用不到. 或者就直接用下面的脚本, 在 eyBuild-00-07-00.tar.gz 同一目录运行它:
# /bin/bash
tar -xzf eyBuild-00-07-00.tar.gz

cd eyBuild
chmod +x bin/web2bin
chmod +x bin/csp2bin
chmod +x bin/donemap.unix
chmod +x demo/demo.unix

EYBUILD_BASE=$PWD


echo ******** CSP2BIN AND COMPILE *********
cd demo
./demo.unix
make

echo ******** RUN DEMO *********
./demo.cgi


======================================================
你可以在 eyBuild/demo/csp 中发现有两个 .csp 文件, 
这个例子正是你要的例子:

********* main.csp **********
<html>
<body>
Hello world. <img src="<% =romPrefix(NULL) %>/img/face.gif">
<BR>
<form action="<% =cgiPrefix(NULL) %>/demo/test.csp" method="post">
    请在输入: <input type="text" name="inputbox1"><br>
    <input type="submit" name="testit" value="testit"><br>
</form>
</body>
</html>

********* test.csp **********
<html>
<body>
This is in test.csp<BR>
你在文本框输入的内容为:<% =getParameter("inputbox1") %><BR>
[ <A href="<% =cgiPrefix(NULL) %>/demo/main.csp">返回</A> ] <BR>
</body>
</html>

======================================================


#8


关于 CGI 个人的一点感悟, 如有不妥请高手指点

关于 cgic, 老早以前我也是用 cgilib 和 cgic 等开发的. 最初的时候还自已写过 cgilib, 改过 w3c 还有debian等的 cgilib. 

它们有共同的缺点就是: 结构复杂, 维护困难. 这一点也就是为什么现在流行的 ASP/JSP/PHP等能取代直接写CGI 程序的原因 (ASP/JSP/PHP 等都是 CGI 的变种).

我所在领域是嵌入式设备上的开发, 在上面开发WEB管理程序只能用C写CGI, 前面几个项目直接用 cgilib进行开发的, 花了相当大的人力和时间, 结果是换个开发人员几乎无法来维护以前编写的CGI代码. 因为无法在很短的时间内弄清里面的结构, 就是一个子页面里内部也有相当多的数据处理.

而在这方面 ASP/JSP/PHP 等的处理就相当好, 可以先编写最终要输出的HTML模板, 然后再在其中必要的地方插入相应的 脚本语言, 结构控制非常简单, 无论移植还是.

CSP 跟 ASP/JSP/PHP 很相似, 就是直接将 C 程序的程序片断插入到 HTML 的模板文件中. CSP 文件通过 CSP2BIN 的工具翻译成 C 程序文件, 其实最终就是 C 文件啦. 用 CSP 确实是用 C开发 CGI 程序的最好的选择. 

所以最新的一个项目(光纤接入的解决方案的局端和用户端 GEPON-VDSL) 我们选择了用 CSP 开发了. 它的管理页面有上百个, 另外还有图片文件, JS 文件, CSS 文件. 

做过嵌入式开发的都知道, 很多设备上文件系统的处理能力都是很有限的, 我们用 CSP 的好搭档 WEB2BIN 工具以及 eybuild提供的其它工具, 就把问题变得异常简单. 最后上百个页面以及相关的图片, JS文件, CSS文件全部生成到一个 CGI 文件中了. 管理变得异常简单.

而我们的开发工作量大大减轻了, 因为我们可以非常容易地将 HTML 代码和 C 代码进行有效地分离了, 而开发人员也有了明显的分工(原来开发 CGI的必须对 HTML/CSS/JS等非常精通). 

另外, 因为 CSP 翻译出来的 C 代码结构还是比较清析地, 个人认为它对想一步步编写 CGI的朋友也是一个很不错的参考. 

#9


我从新做了,但运行./demo.unix时却还是提示:没有/bin/donemap.unix这个文件或文件夹
  郁闷……
 不过我用cgic的库,很好用的
  希望能把这个问题解决了。

#10


能把你你命令行输入和错误信息帖出来吗?
上面帖的那段 bash 脚本也不行吗? 如果不行,请把显示的结果帖出吧.

#11


好的
我在root/project下解压
我把我的命令写成sh,内容:
tar xvzf eyBuild-00-07-00.tar.gz
cd eyBuild
chmod +x bin/web2bin
chmod +x bin/csp2bin
chmod +x bin/donemap.unix
chmod +x demo/demo.unix

EYBUILD_BASE=$PWD
export EYBUILD_BASE

cd demo
./demo.unix

运行到此就提示:/bin/donemap.unix 没有那个文件或文件夹
 看样子EYBUILD_BASE没有得到环境变量。
  我把demo.unix中的EYBUILD_BASE直接改为/root/project/eyBuild
  同时也把bin/donmap.unix中也加上   EYBUILD_BASE=/root/project/eyBuild/bin
   运行./demo.unix终于成功了。
 EYBUILD_BASE还是这个有错误,我自己手加上去的 
   我再看看这个是怎么回事。

#12


是的, 从结果上看是因为 EYBUILD_BASE 没有正确设置所致.
环境变量你可以这样试着加入:

打开当前用户的 .base_profile 文件, 如 vi ~/.base_profile
添加上如下两行:
  EYBUILD_BASE=/root/project/eyBuild/bin
  export EYBUILD_BASE
保存, 并退出
退出 shell 并重新登录一次以确保 ~/.base_profile 中的内容被加载
用命令下面这个命令看看EYBUILD_BASE是否被正确设置: 
set | grep EYBUILD_BASE
如果查找到的话, 会显示出结果, 否则不会有结果

good luck!

#13


haolee(haohao) 喜欢你这样的感受。cgi(c)给我最大的感觉就是从头到尾都尽在掌握之中。如果你不怕麻烦想怎么弄都行:)

#14


好的,十分感谢haolee的耐心解答,我会解决的。
再次感谢yangyouyi(yangyouyi) ,haolee(haohao) ,limlzm(凡叶)的帮助

#15


我现在用的是cgic库
但再学习csp过程中或许还有很多问题,麻烦大家了,希望不鄙赐教。
呵呵

#16


我明明已经揭帖给过分了,在管理中能看到给的分数,可浏览就看不到了,怎么回事啊

#1


当然不可以,一定要在<form>  </form>之间的才可以提交。

#2


你可以改成这样:
<form method="post" action="/cgi-bin/newcgitest.cgi">
  姓名
  <input name="name" type="text" id="name">
  <input type="submit" name="saveenvironment" value="保存环境变量">
</form>

CGI 程序("/cgi-bin/newcgitest.cgi")可以类似下面的 CSP 代码: 

<html>
<body>
你输入的是: <% getParameter("text") %>
<body>
</html>

用工具 csp2bin 可以将上面的代码轻松转化成 C 代码.
用 C 写 CGI 就要到 http://www.eybuild.com 看看.
中文手册: http://www.eybuild.com/develop/doc/manual/eyBuild_manual_ch.pdf

#3


谢谢两位的帮助,刚开始写cgi,有些是比较弱智的问题,可还找不出来,呵呵
我用的cgic的库,挺方便的。
 csp2bin我试过,可解压make后,启动csp2bin提示权限不够,我是root登录的,怎么还不够???
  稍后揭帖。

#4


这个问题我也遇到过, 后来发现 bin目录中的csp2bin的执行权限没有设置, 除此以外还有bin/web2bin, bin/donempa.unix, demo/demo.unix

这个压缩包在 windows上也能用, 我猜可能的原因是这样的: 
作者可能是在 Windows 上打的压缩包, 因为这个包是 For Linux 和 Windows两个平台的, 所以在 Linux 上解开后必须手动改下它们的执行权限. 

你可以按下面的步骤试试:
1. 解压到目录, 如 eyBuild
2.  eyBuild改变权限 
chmod +x bin/web2bin
chmod +x bin/csp2bin
chmod +x bin/donemap.unix
chmod +x demo/demo.unix

3. 设置环境变量(Linux可以加到 ~/.bash_profile中, 重新登录后进行下步)
EYBUILD_BASE=$HOME/eybuild
export EYBUILD_BASE

4. 编译 demo 试例
cd demo
./demo.unix
make

demo.unix 脚本里会调用 csp2bin 这个工具
在 eybuild 的中文手册里对它有描述, 
你可看看这个地址 http://www.eybuild.com/develop/doc/manual/eyBuild_manual_ch.pdf

运行完后你会发现:
有个 cspsrc 目录生成, 这里面就是生成的中间 C 文件
在一个新的文件 demo.cgi 生成了, 它就是最终执行CGI文件

Linux 平台下使用方法跟在 Windows 下的使用方法差不多 

祝你好运!

#5


非常感谢yangyouyi(yangyouyi)和haolee(haohao)的帮助。 
  不过我用的是cgic库,很方便的,没有用csp。
  http://www.boutell.com/cgic/
我照haolee(haohao)的方法做了,但运行./demo.unix时却提示没有/bin/donemap.unix这个文件及文件夹,可bin中有这个文件啊,权限也改了,可以运行的。为什么会有这样的问题呢?

#6


linux下apache的权限是nobody,不是root,建议需要用到system之类的命令就别在cgi里面写,自己写个守护进程来做。如果非要把apache改成root,可以找找以前的资料,记得以前我好像写过,不过找不到,建议还是别改,很危险。

#7


to elc_hall:
非常报歉, 昨天的输入错了一个字符(应该是大写的"B", 因为包解压开时生成的是eyBuild目录)
   EYBUILD_BASE=$HOME/eybuild 中的 eybuild 改为 eyBuild

你必须将环境变量 EYBUILD_BASE 正确地设置到你的目录, 当然也可以使用绝对路径, 否则就会引用不到. 或者就直接用下面的脚本, 在 eyBuild-00-07-00.tar.gz 同一目录运行它:
# /bin/bash
tar -xzf eyBuild-00-07-00.tar.gz

cd eyBuild
chmod +x bin/web2bin
chmod +x bin/csp2bin
chmod +x bin/donemap.unix
chmod +x demo/demo.unix

EYBUILD_BASE=$PWD


echo ******** CSP2BIN AND COMPILE *********
cd demo
./demo.unix
make

echo ******** RUN DEMO *********
./demo.cgi


======================================================
你可以在 eyBuild/demo/csp 中发现有两个 .csp 文件, 
这个例子正是你要的例子:

********* main.csp **********
<html>
<body>
Hello world. <img src="<% =romPrefix(NULL) %>/img/face.gif">
<BR>
<form action="<% =cgiPrefix(NULL) %>/demo/test.csp" method="post">
    请在输入: <input type="text" name="inputbox1"><br>
    <input type="submit" name="testit" value="testit"><br>
</form>
</body>
</html>

********* test.csp **********
<html>
<body>
This is in test.csp<BR>
你在文本框输入的内容为:<% =getParameter("inputbox1") %><BR>
[ <A href="<% =cgiPrefix(NULL) %>/demo/main.csp">返回</A> ] <BR>
</body>
</html>

======================================================


#8


关于 CGI 个人的一点感悟, 如有不妥请高手指点

关于 cgic, 老早以前我也是用 cgilib 和 cgic 等开发的. 最初的时候还自已写过 cgilib, 改过 w3c 还有debian等的 cgilib. 

它们有共同的缺点就是: 结构复杂, 维护困难. 这一点也就是为什么现在流行的 ASP/JSP/PHP等能取代直接写CGI 程序的原因 (ASP/JSP/PHP 等都是 CGI 的变种).

我所在领域是嵌入式设备上的开发, 在上面开发WEB管理程序只能用C写CGI, 前面几个项目直接用 cgilib进行开发的, 花了相当大的人力和时间, 结果是换个开发人员几乎无法来维护以前编写的CGI代码. 因为无法在很短的时间内弄清里面的结构, 就是一个子页面里内部也有相当多的数据处理.

而在这方面 ASP/JSP/PHP 等的处理就相当好, 可以先编写最终要输出的HTML模板, 然后再在其中必要的地方插入相应的 脚本语言, 结构控制非常简单, 无论移植还是.

CSP 跟 ASP/JSP/PHP 很相似, 就是直接将 C 程序的程序片断插入到 HTML 的模板文件中. CSP 文件通过 CSP2BIN 的工具翻译成 C 程序文件, 其实最终就是 C 文件啦. 用 CSP 确实是用 C开发 CGI 程序的最好的选择. 

所以最新的一个项目(光纤接入的解决方案的局端和用户端 GEPON-VDSL) 我们选择了用 CSP 开发了. 它的管理页面有上百个, 另外还有图片文件, JS 文件, CSS 文件. 

做过嵌入式开发的都知道, 很多设备上文件系统的处理能力都是很有限的, 我们用 CSP 的好搭档 WEB2BIN 工具以及 eybuild提供的其它工具, 就把问题变得异常简单. 最后上百个页面以及相关的图片, JS文件, CSS文件全部生成到一个 CGI 文件中了. 管理变得异常简单.

而我们的开发工作量大大减轻了, 因为我们可以非常容易地将 HTML 代码和 C 代码进行有效地分离了, 而开发人员也有了明显的分工(原来开发 CGI的必须对 HTML/CSS/JS等非常精通). 

另外, 因为 CSP 翻译出来的 C 代码结构还是比较清析地, 个人认为它对想一步步编写 CGI的朋友也是一个很不错的参考. 

#9


我从新做了,但运行./demo.unix时却还是提示:没有/bin/donemap.unix这个文件或文件夹
  郁闷……
 不过我用cgic的库,很好用的
  希望能把这个问题解决了。

#10


能把你你命令行输入和错误信息帖出来吗?
上面帖的那段 bash 脚本也不行吗? 如果不行,请把显示的结果帖出吧.

#11


好的
我在root/project下解压
我把我的命令写成sh,内容:
tar xvzf eyBuild-00-07-00.tar.gz
cd eyBuild
chmod +x bin/web2bin
chmod +x bin/csp2bin
chmod +x bin/donemap.unix
chmod +x demo/demo.unix

EYBUILD_BASE=$PWD
export EYBUILD_BASE

cd demo
./demo.unix

运行到此就提示:/bin/donemap.unix 没有那个文件或文件夹
 看样子EYBUILD_BASE没有得到环境变量。
  我把demo.unix中的EYBUILD_BASE直接改为/root/project/eyBuild
  同时也把bin/donmap.unix中也加上   EYBUILD_BASE=/root/project/eyBuild/bin
   运行./demo.unix终于成功了。
 EYBUILD_BASE还是这个有错误,我自己手加上去的 
   我再看看这个是怎么回事。

#12


是的, 从结果上看是因为 EYBUILD_BASE 没有正确设置所致.
环境变量你可以这样试着加入:

打开当前用户的 .base_profile 文件, 如 vi ~/.base_profile
添加上如下两行:
  EYBUILD_BASE=/root/project/eyBuild/bin
  export EYBUILD_BASE
保存, 并退出
退出 shell 并重新登录一次以确保 ~/.base_profile 中的内容被加载
用命令下面这个命令看看EYBUILD_BASE是否被正确设置: 
set | grep EYBUILD_BASE
如果查找到的话, 会显示出结果, 否则不会有结果

good luck!

#13


haolee(haohao) 喜欢你这样的感受。cgi(c)给我最大的感觉就是从头到尾都尽在掌握之中。如果你不怕麻烦想怎么弄都行:)

#14


好的,十分感谢haolee的耐心解答,我会解决的。
再次感谢yangyouyi(yangyouyi) ,haolee(haohao) ,limlzm(凡叶)的帮助

#15


我现在用的是cgic库
但再学习csp过程中或许还有很多问题,麻烦大家了,希望不鄙赐教。
呵呵

#16


我明明已经揭帖给过分了,在管理中能看到给的分数,可浏览就看不到了,怎么回事啊