2004-12-28 19:12 开始一直在网上找资料,问问题:
问:网站上常用的生成“验证码”程序是如何实现的? 用C能不能实现?
答一:需要解决两个问题:
1。、生成gif图片的cgi
2。随机数
随机数很简单吧?生成gif的用libgd.再联个数据库,自己做个SESSION,OVER.
问:楼上几位大哥们能不能说明白点,gd是什么?linux下的库函数吗?是系统自带的还是要下啊?
答:google的第一个,那我就不给你地址了.
还是FREEBSD好,PORTS太方便了.嘿嘿.
libgd是一套C语言库函数,可以直接用C语言进行编程.从这个方面来说,你根本不需要APACHE+PHP这两个东西. 但显然你的题目要求提供图片供别的网页调用,那至少得装APACHE了.然后用C语言编写CGI.
至于随机变量的产生,你还得和客户端保持联系,使得客户端确认数字并返回给你的时候,你还能认得这个随机数字是你什么时候产生的,是给谁产生的,这就是所谓的SESSION.因为HTTP是不保持连接的协议,连完就断.这个SESSION你是用文件实现呢,还是用数据库呢,又牵扯到一些东西.烦.
所以如果你是为了学习,这样做值得,如果是为了使用,还是用PHP等专门的WEB语言吧.
问:我还想问下libgd中的函数如何使用,有没有介绍说明。还有就是assiss
精灵王刚才提到“HTTP是不保持连接的协议,连完就断,”那SESSION是如何实现客户端辨认的呢?
答:给别人回复的帖子,转到这里来吧,看对你有没有帮助:
SESSION技术其实很简单,它的出现是为了解决HTTP不保持连接的问题(凡事有好就有坏).思路一般如下:
客户端向服务器端发送申请的时候,服务器端给客户端发送一个SESSIONID,要保证这个SESSIONID在一定时间/范围内不会重复(重复了就完了),以后客户端给服务器端发送请求的时候,都带上这个SESSIONID(可以用GET,POST,或者COOKIE,取决于服务器端怎么想了),这样服务器端就可以通过这个SESSIONID识别是哪个客户端了. 然后服务器端就可以通过这个SESSIONID读取相关的数据,可以存在文件里,也可以存在数据库里,随便你了.
问:哦,就是URL地址中的那个“id=?????”吗。如果客户在与服务器通信后,第二次用同一个浏览器页面向服务器发请求,就会带上这个SESSIONID,如果客户关掉这个页面并重新开个页面向服务器发请求,服务器就会重新产生一个SESSIONID。是这样吗?
答:如果是URL中的,那的确就没了.如果是COOKIE中的,你可以设定该COOKIE的生存时间.
反正一切都在你的掌握中,呵呵.libgd的主页上有HELP的,很简单.我初学的时候光看HELP就会编它的程序了,和PHP里的一样简单.现在大多数论坛等都是用COOKIE.因为简单.呵呵.如果用GET,那需要在每个URL后面都加上这个SESSIONID,挺烦的.
*******************************************************************************
凌晨4:00,装完写出了libgd,写出了第一个生成PNG格式图片的程序,暂且叫他newgd.c,可是很失望,gcc通不过:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <gd.h>
int
main()
{
int sx,sy,skyblue;
gdImagePtr newimg;
FILE *pngfp;
sx=250;
sy=250;
newimg=gdImageCreate(sx, sy);
pngfp=open("skyblue.png",O_RDWR|O_CREAT|O_TRUNC);
skyblue=gdImageColorAllocate(newimg, 136, 193, 255);
gdImageFill(newimg, 0, 0, skyblue);
gdImagePng(newimg, pngfp);
gdImageDestroy(newimg);
close(pngfp);
exit(0);
}
可gcc通不过,下面是出错提示:
www# gcc newgd.c
newgd.c: In function `main':
newgd.c:17: warning: assignment makes pointer from integer without a cast
/tmp/ccwXdRum.o: In function `main':
/tmp/ccwXdRum.o(.text+0x20): undefined reference to `gdImageCreate'
/tmp/ccwXdRum.o(.text+0x58): undefined reference to `gdImageColorAllocate'
/tmp/ccwXdRum.o(.text+0x71): undefined reference to `gdImageFill'
/tmp/ccwXdRum.o(.text+0x84): undefined reference to `gdImagePng'
/tmp/ccwXdRum.o(.text+0x93): undefined reference to `gdImageDestroy'
www#
我的/usr/local/lib/目录下libpng.so,libpgd.so,libpng.a,libpgd.a文件都有。
还不知道这是怎么回事?
*******************************************************************************
本文地址:http://com.8s8s.com/it/it23948.htm