Linux 烹饪 - 当民主变得疯狂!
弗朗索瓦,你不能告诉我这件事与你无关。这里的数字非常偏向你。通常,我不会质疑你的正直,mon ami,但是餐厅刚刚开门,我们的客人们还没有到达。否则你如何解释你设法获得的选票? Quoi? 是的,弗朗索瓦,我可以看到我们的客人们现在在这里了,但是几分钟前他们还不在。去酒窖,immédiatement。把 2001 年索诺玛县仙粉黛拿回来。我们稍后会讨论这件事。 Vite!
欢迎各位来到 Chez Marcel,这里是美味 Linux 佳肴、世界一流酒窖的所在地,现在也是电子民主行动的家园——当然,是 Linux 风格的。当我的忠实服务员在酒窖为您取酒时,请允许我向您介绍今晚的菜单。电子民主可以说仍处于起步阶段,但它仍在取得进展。借助您的 Linux 系统和 Apache Web 服务器,您可以启动您自己的在线民意调查和投票实验。
啊,弗朗索瓦,你回来了。请为我们的客人倒酒,同时我来描述我们首次进行的电子民主实验,以及一个与你息息相关的问题。民主。Mes amis,您已经看过各种带有在线民意调查的网站,提出的问题从严肃到愚蠢不等。只需稍加努力,您就可以在自己的网站上添加一个民意调查。菜单上的第一项是 Michael 和 Erin Spiceland 的 My Voting Script(请参阅在线资源部分)。要使用这个脚本,只需将 tarball 解压到您的 cgi-bin 目录。在我的系统中,它是 /usr/local/apache/cgi-bin
cd /usr/local/apache/cgi-bin tar -xzvf vote-2.1.tar.gz
应该已经创建了一个名为 vote 的目录。切换到该目录并编辑名为 sitevariables.pl 的文件。这里可以更改几个参数,包括向用户显示民意调查时使用的颜色。您应该花一些时间熟悉各种调整。同时,您可能最感兴趣的是问题和可能的答案
$question = 'Should François get a raise?'; @answers = ('Yes','No');
问题不必严格地是“是”或“否”。您也可以使用这样的形式@answers = ('Yes','No','Maybe');。在我们运行此民意调查并决定弗朗索瓦的薪水之前,让我们看一下其他几个重要的参数
$lockhours = 0; $url = 'http://yourserver/cgi-bin/vote/index.cgi';
$lockhours 参数定义了一个 IP 地址在可以再次投票之前应该等待多长时间。如上所述,设置为零,用户可以从同一个 IP 地址投票任意次数。最后,您应该确保正确输入了服务器地址和脚本路径。要使用您的新民意调查,请将您的浏览器指向 index.cgi 文件,http://yourserver/cgi-bin/vote/index.cgi。您的民意调查问题应该会出现在浏览器中,如图 1 所示。
要注册投票,只需单击其中一个答案,在本例中为“是”或“否”。当输入投票后,会弹出一个窗口,显示即时结果。投票的百分比会被制成表格,并附带一个彩色条,以图形方式表示结果。正如您在图 2 中看到的,我忠实的服务员已经设法为他的加薪赢得了惊人的支持。
这个脚本很简单,一次只能处理一个问题。如果需要更灵活的功能,请查看 David S. Raeman 的 Sympoll。顾名思义,这是一个简单的民意调查系统,但它的简单更多地体现在设置方面,而不是功能方面。安装只花了我几秒钟,然后一切都正常工作了。尽管如此,这个小型的投票包允许您运行多个民意调查,每个投票允许多个选择,从而增加了可用选择的复杂性。民意调查和相关信息存储在 MySQL 数据库文件中。对于这个系统,您需要一个启用 PHP 的 Apache 服务器,当然,还需要在您的系统上运行 MySQL。
将 Sympoll 源代码(参见“资源”部分)解压到您的 Web 服务器文档层次结构中的适当目录中。例如,我的文档根目录在 /usr/local/apache/htdocs,所以我使用以下命令将源代码分发包解压到该位置tar -xzvf sympoll-1.5.tar.gz。目录就位后,请确保 config.php 可被您的 Apache 服务器写入,chmod 660 config.php。在您前往浏览器之前,我应该告诉您,作者建议将 admin 目录的名称更改为 admin 以外的其他名称,以使其更难找到。
接下来,我创建了一个名为 sympoll 的 MySQL 数据库,名称可以随意,使用以下命令
mysqladmin -u root -p create sympoll
我不希望 root 成为在线 Web 访问的数据库管理员,所以我创建了一个名为 polling 的新用户。我通过使用以下命令连接到 MySQL 来完成此操作mysql -u root -p。在mysql>提示符下,我输入了以下内容以创建一个用户,该用户将控制我的 Sympoll 表
mysql> grant all privileges on sympoll.* -> to polling@localhost identified by 'secr3t';
当您执行此操作时,请确保使用不同的用户名和密码,non?我们不希望每位来这家餐厅的访客都提供如此容易猜到的密码。下一步是在您的新数据库中创建表,这通过管理界面完成。将您的浏览器指向您的服务器,使用您加载 Sympoll 的目录,http://yourhost/sympoll/admin(图 3)。
管理员设置非常友好,并引导您逐步完成配置。它首先要求您输入 MySQL 用户名和密码。系统会添加四个表(sympoll_data、sympoll_list、sympoll_auth 和 sympoll_iplog)。系统会要求您确认创建这些表。单击“继续”,直到您进入超级管理员配置屏幕。在这里,这将成为 Sympoll 管理员,即创建其他管理员并管理民意调查的用户。输入用户名和密码,确认您选择的密码,就完成了。您现在位于登录屏幕,准备开始您的民主实践。
主菜单非常易于使用。您可以添加、删除或修改现有的民意调查,创建或删除管理员用户,更改显示属性和日志,以及其他一些易于修改的选项。民意调查也不是静态的。想象一下一个民意调查,其中有红葡萄酒或白葡萄酒的选择。这时,2 号桌的 Roger 希望将干邑添加到列表中,而 16 号桌的 Gar 则绝对必须将单一麦芽威士忌作为选择之一。没问题。您可以在事后添加更多选择并继续投票。
一旦您输入了一个民意调查类别,您将看到类似于以下代码的代码
<?php require '/usr/local/apache/htdocs/sympoll/booth.php'; display_booth(2); ?>
在 PHP 网页上输入该代码,您就可以开始了。请查看图 4,了解您可以预期的结果示例。
花点时间熟悉一下各种配置选项。民意调查显示的默认颜色和外观可以更改为更符合您口味的样式。
今晚菜单上的最后一项来自 Benjamin D. Jones,听起来确实很政治化。它被称为 Recount。显然,它的灵感来自 2000 年美国总统大选。Recount 是一个 PHP 应用程序,允许您创建极其灵活的民意调查,无论是在呈现方式还是结果生成方式方面。它使用 MySQL 或 PostgreSQL 作为其数据库。
从其网站下载最新的 Recount 捆绑包,并将其解压到您的 Web 服务器层次结构中(通常在文档根目录下)。正如我所提到的,Recount 同时支持 PostgreSQL 和 MySQL,但我现在将坚持使用 MySQL。首先,我们使用与上面 Sympoll 相同的技术创建一个 Recount MySQL 数据库,mysqladmin -u root -p create recount。与我的上一个示例一样,我将使用我创建的 polling MySQL 用户,这意味着我需要授予 polling 使用此数据库的权限。同样,我通过使用以下命令连接到 MySQL 来完成此操作mysql -u root -p。从mysql>提示符下,我输入以下内容
mysql> grant all privileges on recount.* -> to polling@localhost identified by 'secr3t';
然后,从 Recount 源代码目录中,我运行以下命令来创建必要的表
mysql -u polling -p recount < sql/mysql.recount.sql
在 Recount 发行目录中,有一个名为 config.recount.php-dist 的文件。将该文件复制到 config.recount.php 并使用您喜欢的编辑器打开它。您应该不会对此文件有任何疑问,因为它有很好的文档记录。但是,您可能最感兴趣的行是这些
define('RECOUNT_HOME_PATH', '/usr/local/apache/htdocs/recount'); define('RECOUNT_DB_TYPE', 'mysql'); /* "mysql" or "pgsql" */ define('RECOUNT_DB_HOST', 'localhost'); /* db host */ define('RECOUNT_DB_USER', 'polling'); define('RECOUNT_DB_PASS', 'secr3t'); define('RECOUNT_DB_NAME', 'recount');
再往下一点,输入 Recount 管理员的用户名和密码。这不是您的用户名,甚至不是 MySQL 用户名,而是您用于管理民意调查的名称和密码
define('RECOUNT_ADMIN_USER', 'admin_name'); define('RECOUNT_ADMIN_PASS', 'admin_password');
当您完成配置文件后,请确保通过更改其权限来保护它
chmod 600 config.recount.php
这就是整个设置。要创建新的民意调查,请将您的浏览器指向 http://yourserver/recount/recount_admin.php 并使用您上面创建的管理员用户和密码登录。请记住,此用户与更新实际 Recount 数据库的 MySQL 用户不同。在表单中输入新的民意调查时(图 5),您可以指定通常的问题和多个答案,以及民意调查的到期日期。如果您已经定义了民意调查,则可以编辑或删除它们。当您完成输入您的信息后,您的新民意调查将被分配一个 ID。
该软件包包含一个现成的页面来测试您的新民意调查,名为 recount_testing.php。如果您将浏览器指向那里,您可以指定任何民意调查 ID。民意调查和结果都可以在页面上显示。为您自己创建一个特定于给定民意调查的投票页面很容易。请查看这个简单的 HTML/PHP 页面
<html> <head><title>Make sure you vote!</title></head> <body> <p><img src="images/logo.png"> <h1>Ready to cast your vote?</h1> <?php require('config.recount.php'); $poll = new RecountPoll(2); print($poll->basicForm()); ?> </body></html>
民意调查 ID 在$poll = new RecountPoll(2)行中标识。在该示例中,民意调查 ID(在括号中)为 2。您可以随意修饰它,或者将 PHP 代码包含在另一个网页中。要查看结果,需要另一个页面,其中包含默认 HTML 标记内的以下 PHP 代码。
<?php require("config.recount.php"); require("results.recount.php"); ?>
这就是全部内容。请查看图 6,了解 Recount 民意调查的实际效果。正如我所提到的,这是一个灵活的软件包。值得浏览一下随附的文档以获取额外的提示。
再一次,看来快到打烊时间了。让我们看看弗朗索瓦的加薪民意调查结果。Mon Dieu, 17,972 票赞成你的加薪,只有 26 票反对?我们的餐厅里没有那么多人,mon ami。我要求重新计票。也许在我们重新开始对这次加薪进行投票时,您可以好心地再次为我们的客人续杯。我非常肯定,关于续杯的问题是我们能够确保获得赞成票的问题之一。下次再见,mes amis,让我们为彼此的健康干杯。A votre santé Bon appétit!
本文的资源: /article/7504。
Marcel Gagné (mggagne@salmar.com) 居住在安大略省密西沙加市。他是 Addison Wesley 出版的 Moving to Linux: Kiss the Blue Screen of Death Goodbye! (ISBN 0-321-15998-5)的作者。他的第一本书是广受好评的 Linux System Administration: A User's Guide (ISBN 0-201-71934-7)。在现实生活中,他是系统集成和网络咨询公司 Salmar Consulting, Inc. 的总裁。