赞助连接

赞助连接

阅 读 文 章

请问谁可以跑cgi了?请教....

[来源:网上转载 (http://bbs.chinaunix.net) | 作者:网友(网络转载) | 时间:2008-09-29 | 浏览:人次 ]

我撤出了php一段时间忙其他,现在要用c写些cgi跑,但是发现测试程序

QUOTE:#include <stdio.h>
main()
{
    printf("Content-type:text/html\n\n");
    printf("Hello,World!");
    fflush(stdout);
}
命令行ok,跑到cgi-bin里面就不可以,查看了apache的文档也照着做了,就是总是如下一句错误:

QUOTE:[Sat Sep 27 06:50:23 2008] [error] [client 127.0.0.1] Premature end of script headers: /cgi-bin/hello
我有看了apache的user和group配置是www(php的时候没这动过啥阿,所以没改),需要改么?
另外自带的test-cgi也运行尝试了,但是发现

QUOTE:[Sat Sep 27 07:19:33 2008] [error] (2)No such file or directory: exec of /cgi-bin/test-cgi failed
[Sat Sep 27 07:19:33 2008] [error] [client 127.0.0.1] Premature end of script headers: /cgi-bin/test-cgi
我搞不清是cgi-bin到底是放在www下面还是放在htdocs下面了,因为自带的是在www下面,可是文章写在htdocs下面,于是我两个都放了测试一下,并且测试脚本权限755
命令行执行test-cgi结果让人沮丧

QUOTE:CGI/1.0 test script report:

argc is 0. argv is .

SERVER_SOFTWARE =
SERVER_NAME =
GATEWAY_INTE *** CE =
SERVER_PROTOCOL =
SERVER_PORT =
REQUEST_METHOD =
HTTP_ACCEPT =
PATH_INFO =
PATH_TRANSLATED =
SCRIPT_NAME =
QUERY_STRING =
REMOTE_HOST =
REMOTE_ADDR =
REMOTE_USER =
AUTH_TYPE =
CONTENT_TYPE =
CONTENT_LENGTH =
等于什么都没有测试到
最后我想起了FAQ,看到了如下的话

QUOTE:Existing CGIs: Most will NOT work as is. They may need programs or libraries outside /var/www. Some can be fixed by compiling so they are statically linked (not needing libraries in other directories), most may be fixed by populating the /var/www directory with the files required by the application, though this is non-trivial and requires some knowledge of the program.
网上有人写

QUOTE:如果搂主的应用大量使用cgi,并且不希望关闭apache的chroot(OpenBSD的卖点就是这个了),而且硬盘也足够大,那就干脆把/usr/lib和/usr/libexec全部复制到/var/www里面。
请问可行么?
我实在搞不清到底哪里错了,毕竟可能出错的地方太多糊涂了,请问有能够正确运行cgi的筒子么?请教您是如何做的?




由于 OpenBSD 里的 Apache 默认是运行在 chroot 环境,所以楼主写的 c 程序如果需要动态链接库,就必须将这些依赖的动态链接库按照原有的目录结构,拷贝到 /var/www/ 下。

查看你的程序依赖的动态链接库可以用 ldd 命令,例如:

[Copy to clipboard] [ - ]CODE:$ ldd /bin/bash
        libtermcap.so.2 => /lib64/libtermcap.so.2 (0x00002aefade99000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00002aefae09c000)
        libc.so.6 => /lib64/libc.so.6 (0x00002aefae2a0000)
        /lib64/ld-linux-x86-64.so.2 (0x00002aefadc7d000)
这样你就必须将 /lib64/libtermcap.so.2 等几个文件,按照原有的目录结构,拷贝到 /var/www/ 下。在此例中,最终的文件位置将是:

[Copy to clipboard] [ - ]CODE:/var/www/lib64/libtermcap.so.2
Perl 脚本,Python 脚本也类似,需要将依赖的 module 等文件拷贝进去。

Enjoy。


另外,测试你的程序是否能够正常作为 cgi 程序来跑的最简单方法是:
1)先将 apache 运行在非 chroot 模式:

[Copy to clipboard] [ - ]CODE:# httpd -u
2)为你的 cgi 程序加上可执行权限:

[Copy to clipboard] [ - ]CODE:# chmod +x /var/www/cgi-bin/你的程序.cgi
3)通过浏览器进行访问测试:
http://你的IP/你的程序.cgi

如果以上测试顺利通过,则只要解决上面帖子说的动态链接库的依赖问题就基本 OK 了。


TAG标签 : 请教 可以 请问 程序 测试 cgi 依赖 动态 链接 of to

最新评论 共有0位网友发表了评论

发表评论

评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名:(注册)
密码:
验证码:
匿名发表
网站地图友情连接交流论坛网站投稿广告服务联系我们留言本站长统计
Some rights reserved: www.chmhome.com, 鄂ICP备07010232号 E-mail:chinakafei@live.com,QQ:552766
中国咖啡技术网(Chmhome):国外编程技术书籍,中文编程手册,经典编程文章,交流技术,技术软件下载,计算机论文,毕业论文.