注册 登录
编程论坛 VFP论坛

foxpro web 开发原理(二)

sam_jiang 发布于 2025-05-04 20:36, 1151 次点击
上次发帖探讨了一下web开发的原理,很多人感兴趣,那么我们就继续探讨一下。

deepseek 提供的代码,编译后运行有问题,一直报错502.2,deepseek也一直解决不了,没办法,只好上网继续搜索相关内容。

最后,只好退而求其次,找到其他的语言,再设法翻译成foxpro,好在懂一点点visual basic,参考VB代码,改编了foxpro代码,编译运行后果然成功了。。。

现附上代码,以作抛砖引玉之功效:
程序代码:

* CGI处理示例
* 定义 Windows API 常量
#DEFINE STD_INPUT_HANDLE   -10
#DEFINE STD_OUTPUT_HANDLE  -11

* 声明 Windows API
DECLARE Sleep IN kernel32 INTEGER dwMilliseconds
DECLARE INTEGER GetStdHandle IN kernel32 INTEGER nStdHandle
DECLARE INTEGER ReadFile IN kernel32 ;
    INTEGER hFile, ;
    STRING @lpBuffer, ;
    INTEGER nNumberOfBytesToRead, ;
    INTEGER @lpNumberOfBytesRead, ;
    INTEGER lpOverlapped

DECLARE INTEGER WriteFile IN kernel32 ;
    INTEGER hFile, ;
    STRING lpBuffer, ;
    INTEGER nNumberOfBytesToWrite, ;
    INTEGER @lpNumberOfBytesWritten, ;
    INTEGER lpOverlapped

* CGI 环境变量常量
CGI_CONTENT_LENGTH = "CONTENT_LENGTH"

* 主程序
CLEAR
SET TALK OFF
SET CONSOLE OFF

* 获取标准输入输出句柄
hStdIn = GetStdHandle(STD_INPUT_HANDLE)
hStdOut = GetStdHandle(STD_OUTPUT_HANDLE)

* 调试用暂停(如果需要)
* [color=#808080]=Sleep(60000)  && 暂停60秒等待调试器附加[/color]

* 读取POST内容
lcContentLength = GETENV(CGI_CONTENT_LENGTH)
lnContentLength = VAL(lcContentLength)

IF lnContentLength > 0
    * 准备缓冲区
    lcReadBuffer = REPLICATE(CHR(0), lnContentLength)
    lnBytesRead = 0
   
    * 读取输入
    =ReadFile(hStdIn, @lcReadBuffer, lnContentLength, @lnBytesRead, 0)
    lcReadBuffer = LEFT(lcReadBuffer, lnBytesRead)
   
    * 解析参数
    lnPos = AT("=", lcReadBuffer)
    IF lnPos > 0
        lcValue = SUBSTR(lcReadBuffer, lnPos + 1)
    ELSE
        lcValue = lcReadBuffer
    ENDIF
ELSE
    lcValue = ""
ENDIF

* 构建响应
lcResponse = "HTTP/1.0 200 OK" + CHR(13) + CHR(10) + ;
            "Content-Type: text/html" + CHR(13) + CHR(10) + ;
            CHR(13) + CHR(10) + ;
            "Hello World!" + lcValue

* 发送响应
lnBytesWritten = 0
=WriteFile(hStdOut, lcResponse, LEN(lcResponse), @lnBytesWritten, 0)

* 清理
CLEAR DLLS
RETURN


运行后效果如下:
只有本站会员才能查看附件,请 登录
11 回复
#2
wcx_cc2025-05-04 21:21
支持!!赞
#3
凝聚双眼2025-05-05 14:28
感谢分享,很给力!~
#4
schtg2025-05-05 15:40
谢谢分享!继续支持!
#5
easyppt2025-05-06 09:21
把代码保存为 sample.fpx 吗,然后IIS如何配置啊
希望分享一下 IIS如何配置

[此贴子已经被作者于2025-5-6 09:23编辑过]

#6
sam_jiang2025-05-06 10:48
回复 5楼 easyppt
回复 5楼 easyppt
这个问题问得好,说明你认真思考了

这个程序就是cgi程序,我编译后把它命名为control.exe,保存在服务器的cgi目录,最好把foxpro支持库也复制过去,避免运行错误。

IIS 配置如下:
1,
只有本站会员才能查看附件,请 登录

2,
只有本站会员才能查看附件,请 登录

3,
只有本站会员才能查看附件,请 登录


[此贴子已经被作者于2025-5-6 19:32编辑过]

#7
yywx20232025-05-06 11:13
感谢分享

#8
hsfisher2025-05-06 11:51
赞,感谢分享
#9
sam_jiang2025-05-06 19:40
4,
只有本站会员才能查看附件,请 登录


sample.fpx是我们自定义的脚本文件,本例子只是为了了解cgi的运行原理,实际上control.exe并没有对sample.fpx进行任何解释,以后我会举例如何对自定义脚本进行解析。。。

[此贴子已经被作者于2025-5-6 20:14编辑过]

#10
sam_jiang2025-05-06 19:41
4,
只有本站会员才能查看附件,请 登录
#11
easyppt2025-05-07 08:38
感谢大佬分享,我照着试一下!
#12
schtg2025-05-07 10:15
讲解很详细,谢谢!
1