目录 | 第一章 | 第二章 | 第三章 | 第四章 | 第五章 | 第六章 | 第七章 | 第八章 | 第九章 | 第十章 |
上传文件是建立交互式网站的一个重要手段。一般来说,考虑到CGI程序的安全和一些
敏感问题,服务器是不会轻易开放文件上传权利的。
今天的程序是由WEBSITE1.1附带的一个upload.exe程序,由VB编写而成。所以我要讲的
也就是VB写WIN-CGI时候的一些问题。
VB写Win-CGI:
在Windows环境下,WEB服务器和一个Windows CGI之间是通过临时文件来传送数据的。这个
过程如下:
1.Web服务器接受一个客户机对Windows CGI程序的请求,这个请求也称为Windows CGI
请求。
2.Web服务器把要传送给Windows CGI程序的数据放在一个叫CGI profile的主输入文件。
在某些情况下,还会增加一个文件。
3.Web服务器执行CGI程序,把CGI profile作为它的第一个参数。
4.Windows CGI开始执行,服务器等待Windows CGI进程结束。在等待过程中,服务器还
可以处理其他请求,比如另一个新的CGI进程或HTTP请求。
5.Windows CGI程序读取作为命令行参数的profile文件并完成必要的处理,CGI程序也
许要使用porfile文件中的数据和其他相关的辅助文件中的数据。
6.在Windows CGI程序结束前,把它的应答写在profile文件指定的输出文件中。
7.得到CGI程序处理结果后,WEB服务器读取输出文件,看看输出数据是否要打包,并
把最后数据发给客户机。
8.WEB服务器随后就删除处理这个请求时产生的临时文件。如果在服务器管理器注册时,
不删除临时文件,则保留这些临时文件。
总的说,基于文件的传输过程是比较古老的。但它是最常用的通讯方式。
CGI32.BAS
CGI32.BAS是给windows系列的使用者在VB4.0或更高的环境下开发Windows-cgi而写的一
个程序接口。本文假设你已经对VB编程非常熟悉,所以对于使用VB的过程我就省略不说了。
在写Win-CGI程序的时候,请将VB环境中的有效对象全部关掉(Custom controls),并将
CGI32.bas加入project中。随后创建一个子程序
CGI_Main()
Sub CGI-Main()
'Win-CGI程序内容
end sub
对于CGI32.bas,如果你还没有,请在这里下载。
Sub Main()
On Error GoTo ErrorHandler
If Trim$(Command$) = "" Then ' Interactive start
Inter_Main ' Call interactive main
Exit Sub ' Exit the program
End If
InitializeCGI ' Create the CGI environment
'===========
CGI_Main ' Execute the actual "script"
'===========
Cleanup:
Close #CGI_OutputFN
Exit Sub ' End the program
'------------
ErrorHandler:
Select Case Err ' Decode our "user defined" errors
Case ERR_NO_FIELD:
ErrorString = "Unknown form field"
Case Else:
ErrorString = Error$ ' Must be VB error
End Select
ErrorString = ErrorString & " (error #" & Err & ")"
On Error GoTo 0 ' Prevent recursion
ErrorHandler (Err) ' Generate HTTP error result
Resume Cleanup
'------------
End Sub
上面是一个Win-cgi的例子。