修改BBSLIB.inc的post_article()函数
sprintf(buf3, "boards/%s/.DIR", board);
fp=fopen(buf3, "a");
fwrite(&header, sizeof(header), 1, fp);
fclose(fp);
从这里开始添加
sprintf(dir,"%s%s/%s",BASEDIR,currentuser.userid,getparm("utmpkey"));
if((att=check_attach(dir))>0){
mk_attach_dir(board);
sprintf(buf4,"%s%s/%s",ATTACHDIR,board,header.filename);
mkdir(buf4,S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH);
if((dp=opendir(dir))==NULL){
return;
}
chdir(dir);
while((entry=readdir(dp)) != NULL){
stat(entry->d_name,&statbuf);
if(strcmp(".",entry->d_name)==0 || strcmp("..",entry->d_name)==0)
continue;
if(S_ISDIR(statbuf.st_mode))
continue;
sprintf(buf5,"%s/%s",buf4,entry->d_name);
copy_file(entry->d_name,buf5);
unlink(entry->d_name);
}
chdir(BBSHOME);
closedir(dp);
}
至于上载操作,大家可以自举选择完成,可以选择用cgi,也可以直接采用php
如果是cgi的话,请大家将cgi放到bbs相同的目录
比如perl可以这样读出cookie
#!/usr/bin/perl
$cookie=$ENV{'HTTP_COOKIE'};
print "Content-Type: text/html\n\n";
print "<html>\n<title>错误!</title>\n";
print "<body bgcolor=\"\#ffffff\" text=\"\#000000\">\n";
print $cookie;
print "</html>";
exit(0);
~
大家可以对这个进行一些稍复杂的操作,然后检查这个用户是否登陆。
如果用php的话,就比较麻烦一点,因为php不是cgi,不能放在cgi-bin,可以直接放在
html目录下,如果http路径是/的话,可以这样进行修改
定义一个宏
#define setcookie2(a, b) printf("<script>document.cookie='%s=%s;path=/'</script>\n", a, b)
然后在出现setcookie()函数的地方用一遍setcookie2()
譬如
setcookie("utmpkey", "");
setcookie2("utmpkey", "");
在php里面验证它是否登陆可以这样操作
$cookieuser=$HTTP_COOKIE_VARS['utmpuserid'];
$cookiepid=$HTTP_COOKIE_VARS['utmpkey'];
if($cookieuser=="" || $cookiepid=="" || $cookieuser!=$userid){
echo "你没有登陆,或者超时,无法完成附件上传。";
echo "<a href='/cgi-bin/bbs/bbsupload'>返回</a>";
exit;
}
上载的思路大致是这样的
用户每上载一个文件,就将文件拷贝到BASEDIR下面的userid/pid目录下
上载完毕以后发表文章的时候,检查BASEDIR/userid/pid下面有没有附件,
如果有,就将其拷贝到ATTACHDIR/boards/M.********(文章的文件名)/下
看文章的时候就检查这个目录是否有文件,有就显示成附件
缺欠是删除文章的时候没有做删除附件的操作,也没有规定附件的保存时间
如果大家有兴趣可以对其扩充,感谢当时做这个的时候车人和lepton的帮忙。
--
FROM www.shuoshuo.net