FreeNetshop
制造商:FreeNetshop
电子邮件:coretm@freenetshop.org
价格:顾名思义,它是免费的!
评论者:Kevin Lyons
FreeNetshop 是一款在线电子商务、销售和订单跟踪软件套件,其客户界面模仿了流行的“购物车”主题。它被设计为可在任何使用 NCSA 兼容 Web 服务器(包括 Apache)的 UNIX 系统上运行。当然,FreeNetshop 是免费的,并根据 GPL 许可获得许可。
FreeNetshop (FNS) 与免费提供的 mSQL 关系数据库配合使用,并且能够在一台服务器上使用 msqld 的单个实例运行多个独立副本。这使其非常适合为来自其服务器池中每个系统的多个客户/域提供服务的 Web 存在提供商和 ISP。 FNS 已经在 mSQL 1.0.9 和 1.0.16 版本上进行了测试。移植到 mSQL 2 和 MySQL 的工作正在进行中。
FNS 使用 mSQL C 编程 API、Thomas Boutell 出色的 CGIC 库以及 UNIX 库调用来优化速度并最大限度地减少运行时大小。独立的配置参数在安装时编译,以减少执行期间的查找开销。 FNS 还可以通过编辑几个 HTML 页面在不同站点之间进行自定义。
FreeNetshop 发行版由通用网关接口 (CGI) 程序和 HTML 表单组成。 FNS 从一开始就被设计为允许在单个主机上托管多个站点。因此,FNS CGI 程序体积小且速度快。
FNS 安装的性能主要取决于数据库 (mSQL) 和 Web 服务器的速度。选择 mSQL 作为数据库是因为它为中小型关系数据库定义了性能标准,并且易于获取。例如,在配备 16MB RAM 的 AMD 586、133MHz 机器上,对包含 100,000 条记录的表进行索引查找一条记录所花费的时间不到半秒,包括 Web 服务器和客户端响应时间。在同一台机器上,在包含 100,000 条记录的 50 个字符字段中进行非索引字符串搜索所花费的时间不到三秒。
FreeNetshop 1.3 版本的功能
使用编译后的 ANSI C,执行速度快、体积小
基于 Cookie 的用户跟踪
销售税计算
自动 HTML 页面生成,数据库中所有产品均带有可自定义的页眉和页脚
最多五类 UPS 运输的运费计算
密码验证
支持公共终端帐户清理
虚拟和非虚拟主机操作
支持 SSL 操作
体积小:压缩的 tar 文件小于 424K;安装后约为 5MB;可执行文件平均小于 95K
电子邮件订单通知
基于 Web 浏览器的管理
实时销售报告
查看 FreeNetshop 表架构显示,数据库尚未完全规范化。做出此决定的目的是最大限度地减少应用程序 CGI 程序中特定点的表查找次数。当然,此决定的效果是牺牲少量存储空间以实现更快的响应速度。图 1 显示了表关系。可以看出,客户可能与购物车和订单具有一对多和一对一的关系。订单反过来可以与 Lineitems 具有一对多或一对一的关系。 Lineitems 和购物车与产品是一对一的关系。产品(即产品记录)将与 Lineitems 和购物车具有多对一的关系,因为一个产品编号将存在于多个购物车和订单行项目中。

图 1. FNS 中的表关系
FNS 发行版分为客户级程序和管理级程序。客户程序位于站点 cgi-bin 目录中。管理程序位于每个站点的 admin/cgi-bin 中。 admin 目录受大多数 NCSA 兼容 Web 服务器(包括 Apache)中包含的 htaccess 功能保护。
客户级程序链接到 HTML 页面和彼此之间,以便将商品添加到购物车和下订单的过程完全由菜单驱动。然而,主机 ISP 或管理员可能需要了解与 cgi 程序相关的订购过程。客户级程序包括 search.cgi、addcart.cgi、viewcart.cgi、upcart.cgi、preorder.cgi、ordercalc.cgi、order.cgi、clearcust.cgi 和 account.cgi。图 2 显示了客户订购顺序。
search.cgi 为客户提供输入关键字以搜索产品数据库表的方法。 search.cgi 输出所有匹配记录(产品)的列表,其中包含简短描述和产品 HTML 页面的链接。此外,search.cgi 引入页眉和页脚 HTML 文件,以便动态生成的结果页面出现在外观一致的站点界面中(有关详细信息,请参阅发行版中包含的 CUSTOMIZE 文件)。
addcart.cgi 将产品添加到客户的购物车。在内部,addcart.cgi 向客户的计算机发送一个唯一的 cookie,并将相应的产品编号添加到 Cart 数据库表中。除了标准的产品编号、价格等之外,序列号也被添加到 Cart 表中。序列号基于添加商品时的日期和时间。这为站点管理员提供了一种从 Cart 表中删除旧条目的方法。客户可以添加到其购物车的商品数量没有限制。
viewcart.cgi 拉取一个列表,其中显示客户购物车中的所有产品项目。此外,数量显示在表单字段中,以便客户可以更改数量或从购物车中删除产品。
upcart.cgi 执行 Cart 表中产品数量的实际更新,然后重新生成购物清单页面,其中显示更新后的数量。 viewcart.cgi 和 upcart.cgi 中提供了链接,允许客户继续下单。
preorder.cgi 在为五类 UPS 添加运费时添加到 FNS 1.3 中。如果客户以前订购过,preorder.cgi 会从 Customer 表中获取地址信息,如果客户是新客户,则提供空白表单字段。
ordercalc.cgi 获取从 preorder.cgi 输入的运输信息和地址数据,并计算订单成本和运费。 order.cgi 然后提供表单字段供客户输入信用卡信息。如果客户在 preorder.cgi 中输入的密码正确,则默认客户信用卡信息将自动填充到表单字段中。还有一个字段供客户输入有关其订单的任何特殊注释。
order.cgi 将订单信息提交到正确的表中。特别是,order.cgi 更新 Order 表,创建唯一的订单号,更新 Lineitem 表并从 Cart 表中删除选定的项目。此外,order.cgi 创建电子邮件订单通知消息并将其发送给站点管理员。 order.cgi 还将订单输出到客户,以便保存或打印。管理员收到订单的电子邮件通知后,他可以验证订单的完整性,并通过电子邮件将副本转发给客户。电子邮件订单通知也可以由管理员打印并用作装箱单。
clearcust.cgi 允许客户从 Customer 表中删除与其基于 cookie 的用户 ID 号码对应的所有条目。这旨在为从公共终端/信息亭订购的客户提供额外的隐私/安全功能。虽然窃贼仍然需要知道客户的密码才能访问信用卡信息,但如果未提供此功能,则下次访问 FNS 站点时,上次在特定终端上输入的运输和联系信息将出现。 clearcust.cgi 可以由客户从 order.cgi 生成的订单完成/已处理页面的底部调用。
account.cgi 允许客户更改默认的帐单和运输信息。客户必须输入其电子邮件地址和正确的密码,然后才能访问任何数据。
FNS 包括允许完整的基于 Web 的站点管理的程序。可以通过管理页面产品部分下的链接从 Web 添加、更改和删除产品。 FNS 还允许为产品数据库表中的产品自动生成网页。提供对客户数据的访问,管理员可以通过 Web 查看、更新、删除或选择(按名称)客户信息。同样,也提供了查看订单数据和更新订单数据的功能,以及按产品类型和日期范围进行的销售报告。还提供以 ASCII 分隔文本格式导入和导出数据。
管理 CGI 程序包括用于从 Customer、Order 和 Product 数据库表中添加、更新和删除数据的可执行文件。大多数程序都是不言自明的,但下面将讨论几个重要的项目。
addprod.cgi 将产品数据添加到 Products 表。数据输入到 HTML 表单页面中。该表单包括用户输入的唯一产品标识号 (prodno) 以及描述、名称和价格的数据字段。提供以天或周为单位的可用性和现有数量。还提供一个输入搜索关键字的字段。关键字之间应以空格分隔输入;不建议使用引号或撇号等特殊字符。此处输入的关键字供 search.cgi 用于确定匹配项。提供了一个用于输入图像 URL 的字段。当 FNS 的 genppage.cgi 程序生成产品 HTML 页面时,将添加此 URL 引用的图像。图像的默认位置在 /images 目录中。条目应遵循以下格式
../images/prodimage.jpg
其中 prodimage.jpg 是图像文件名。实际图像可以使用 FTP 传输到 images 目录,可以在添加产品之前或之后进行。多个产品也可以共享同一张图像。输入数据后,addprod.cgi 会将信息插入到 Product 表中。
genppage.cgi 以 HTML 格式自动生成产品页面。 genppage.cgi 读取 header.htm 和 footer.htm 文件,并在与 Products 表中的产品数据组合后将它们写入 HTML 文件。 genppage.cgi 以产品编号命名输出文件,并在“products”目录中创建页面。因此,genpage.cgi 为产品编号 1000 创建文件 products/1000.htm。当产品更新并且 header.htm 或 footer.htm 文件更改时,站点管理员可以通过为该特定产品或通过指定范围(按产品编号)重新运行 genppage.cgi 来更新产品 HTML 页面。 search.cgi 程序提供指向从搜索返回的每个产品的产品页面的链接。
upord.cgi 可用于更新基本订单信息。如果需要行项目级别的更改,则可以将订单清零或作废,然后作为新订单重新输入。当订单的所有产品发货时,可以将实际发货日期输入到“完成发货日期”字段中以供将来参考。
export.cgi 允许管理员将 FNS 表的内容导出到文本文件。运行 export.cgi 将创建以下文件:dataprod.csv、datacust.csv、dataord.csv、dataline.csv、datacart.csv、datapack.csv 和 datahold.csv。文件名与内容相对应;例如,dataprod.csv 包含来自 Products 表的所有数据。这些文件在 admin 目录中创建。文件以 ASCII 逗号分隔值格式编写,文本用引号分隔(有时称为 ASCII 分隔文本)。导出的数据文件可以导入到识别此格式的电子表格或其他数据库中。
import.cgi 的工作正在进行中。完成后,import.cgi 将读取由 export.cgi 导出的数据文件到数据库表中。如果想要导入特定的表,例如 Products,则可以将其他数据文件重命名、移动或从 /admin 目录中删除。如果 import.cgi 用于插入以逗号分隔值格式从电子表格导出的数据文件,则务必确保字段长度不超过 FNS 表中允许的长度(请参阅 createtables 文件以获取表定义),否则数据值将被截断。例如,客户姓名字段 (name) 显示的数据类型为 char(50)。这意味着此字段中最多允许 50 个字符。但是,可以输入的实际可用字符数为 48,因为分隔符必须在总数中考虑在内。同样重要的是要验证所有文本字段都用引号括起来,并且字段顺序符合 FNS 中定义的字段顺序。大多数电子表格在以 CSV 格式导出时都会自动用引号括起文本单元格。
除了这些基于 Web 的实用程序之外,mSQL 还附带了几个命令行工具和一个终端监视器,允许从 shell 帐户维护数据库。有关这些工具的详细信息,请参阅 mSQL 文档。
总而言之,FreeNetshop 提供了一个相当简单但可扩展且稳健的应用程序,可以在其上开发电子商务站点。
Kevin Lyons (klyons@corserv.com) 自 1985 年以来一直从事 UNIX 工作。他在 SCO Xenix、NextStep、Solaris、Linux、FreeBSD 和 OpenBSD 平台方面拥有经验。