PHP 和 PostgreSQL 中的 ASP.NET 问题跟踪器入门套件(奔向 Linux)






3.70/5 (7投票s)
2005 年 9 月 22 日
6分钟阅读

50354

350
如何在 Linux 服务器上设置和安装 PHP 问题跟踪器入门套件。
引言
本周,将 ASP.NET 应用程序移植到“奔向 Linux”是一个相当大的挑战。我渴望测试我最新的开发工具,其中包括一个小型持久化 PHP 框架,带有一个数据访问层,以及一个我称之为 Code Stylist IDE 的新手友好型生成式软件开发应用程序。这些工具由我编写,并可从我的软件公司 Megapump, Inc. 获取。
从 ASP.NET 移植
首先,我查看了 ASP.NET 问题跟踪器的表模式。嗯,18 个表,不是一个小项目!我稍微缩短了表名,然后通过 Code Stylist 创建了 PostgreSQL 表。接下来,我映射了表之间的关系,不到一个小时,我就准备好了 90% 的 PHP、SQL、CSS、JavaScript 和 HTML 模板代码。事实上,我本可以当天提交参赛作品,但竞赛要求规定,移植后的应用程序看起来应该与原始应用程序几乎相同。
挑战
将 ASP.NET 应用程序移植到 PHP 最困难的部分是将自动生成的后端代码嵌入到重新利用的前端代码中。我将原始页面保存为 HTML,并使用了 Web 浏览器 OmniWeb(它有一个很棒的“Reformat”命令)来清理它,然后提取了关键的布局代码。我对 ASP.NET 的输出印象非常深刻,它非常简洁,而且微软在其中使用了一些令人惊叹的 JavaScript 魔法。不幸的是,由于这是一场竞速,我立即决定在服务器端(使用 PHP)实现大部分功能,而不是尝试适配 JavaScript。如果时间充裕,或许可以利用其中一些基础设施。
模板
在分析了 ASP.NET 应用程序的 HTML 后,我能够提取出每个页面共有的页眉、页脚和侧边栏代码。我在中心添加了一个 %content% 标签,并将其粘贴到 Code Stylist 的模板视图中。在预览或发布时,%content% 标签会被替换为 <?php echo $page_content; ?>
。在浏览器中打开页面时,Code Stylist 规定的执行顺序大致是:
- 前端控制器连接到数据库,并从 XML 存储中读取特定于页面的模板值。
- 页面控制器为视图构建数据对象。
- 页面视图使用输出缓冲进行缓存。
- 模板视图(页眉、页脚和侧边栏)包装页面视图(内容),然后将整个内容发送到浏览器。
页面
默认页面生成器以及用户定义的表关系是我所需的一切,可以立即构建完整的页面以及模板视图和控制器,包括大多数页面应用程序中的复杂多表 SELECT
/JOIN
查询。然而,生成的视图与原始视图完全不像,而且我没有时间自定义生成器,因此有必要放弃生成的视图代码,而采用从 ASP.NET 问题跟踪器中精心剪切的代码块。
集成
将 ASP.NET 应用程序移植到 PHP 的最后一步是替换表单输入名称,使其与自动生成的控制器代码匹配。例如,在 ASP.NET 实现中,一个输入字段的代码是 name="txtTitle",但生成的代码使用 tablename_fieldname,所以我需要将源更改为 name="issues_title",并且整个过程都是如此。在处理完表单后,我使用简单的 JavaScript 为各种按钮添加了行为,并添加了服务器端代码来填充弹出菜单。
结果
生成的应用程序的外观和功能几乎与原始应用程序完全相同,因为它共享大部分相同的 HTML。要使一切功能正常,需要进行大量的细致的手工工作,但我新的生成式编码方法非常有帮助,并且肯定会随着我获得的经验而得到改进。这些代码将用于 MySQL,请关注 此处 以获取更多“开发动态”。
环境
我使用 PHP 4.3.11 和 PostgreSQL 7.4.8 进行测试,但一切都应该在 PHP 5 下正常运行。Code Stylist IDE(Windows、Mac、Linux)可以将 *IssueTracker.cst* 项目文件输出到 MySQL 或 PostgreSQL,更多数据库即将支持。
设置(简短版)
PostgreSQL
- 在 *.zip* 文件中有一个名为 *issue_tracker.tar.gz* 的文件 - 这个文件应该被传输到 Linux 服务器。
- SSH 或 Telnet 到 Linux 服务器,使用以下命令解压存档:'tar -xvzf issue_tracker.tar.gz'。
- 创建一个 PostgreSQL 数据库:'createdb issuetracker',然后创建表 'psql issuetracker < issue_tracker/tables.sql'。
- 编辑 CONFIG 文件(Pico 是一个简单的文本编辑器)'pico issue_tracker/config.php'。
- 最后,将文件夹复制到您的 Web 服务器文档根目录。在我的例子中,我输入了 'mv issue_tracker /home/brian/public_html/megapump/tracker'。
- 在浏览器中打开 index.php 文件,您就可以开始使用了!
- 有 Bug?请 告诉我。谢谢!
MySQL (新增!)
- 在 *.zip* 文件中有一个名为 *issue_tracker_mysql.tar.gz* 的文件 - 这个文件应该被传输到 Linux 服务器。
- SSH 或 Telnet 到 Linux 服务器,使用以下命令解压存档:'tar -xvzf issue_tracker_mysql.tar.gz'。
- 创建一个 MySQL 数据库:'mysql -u root',然后 'create database issuetracker'。
- 选择数据库:'use issuetracker'。
- 运行 SQL 脚本文件以创建表:'\. issue_tracker/tables.sql'。
- 编辑 CONFIG 文件(Pico 是一个简单的文本编辑器)'pico issue_tracker/config.php'。
- 最后,将文件夹复制到您的 Web 服务器文档根目录。在我的例子中,我输入了 'mv issue_tracker /home/brian/public_html/megapump/tracker'。
设置(SUSE Linux 逐步指南)
您必须以标准用户(非 root)帐户登录。
- 打开 YaST。
- 点击“安装和移除软件”。
- 搜索 'mysql'。
- 勾选以下选项:
- mysql
- mysql-client
- php4-mysql
- 搜索 'php'。
- 勾选以下选项:
- php4
- php4-session
- php4-mcrypt
- php4-gd
- 搜索 'apache'。
- 勾选以下选项:
- apache2
- apache2-mod_php4
- 点击“接受”按钮。
- 点击“继续”(接受自动更改)(此时可能会提示您插入 SUSE 安装 CD)。
- 单击“完成”。
- 关闭 YaST。
- 打开 Konsole(系统 -> 终端 -> Konsole)。
- 键入 'su' [回车]。
- 键入 root 密码 [回车]。
- 键入 '/etc/init.d/mysqld restart' [回车]。
- 键入 '/etc/init.d/apache2 restart' [回车]。
- 键入 'exit' [回车](保持 Konsole 打开)。
- 在 Web 浏览器(Konquerer、Firefox)中访问 www.codeproject.com。
- 登录。
- 访问 www.codeproject.com/useritems/codestylist.asp。
- 点击“下载源代码”链接(MySQL)。
- 点击“另存为”[回车]。
- 在窗口的左侧(如果使用 Konqueror),点击 public_html。
- 关闭浏览器。
- 在 Konsole 中键入 'cd public_html' [回车]。
- 键入 'unzip *zip' [回车]。
- 键入 'tar -xvzf *gz' [回车]。
- 键入 'mysql -u root' [回车]。
- 键入 'create database issuetracker;' [回车]。
- 键入 'use issuetracker;' [回车]。
- 键入 '\. issue_tracker/tables.sql' [回车]。
- 键入 '\q' [回车]。
- 键入 'pico issue_tracker/config.php' [回车]。
- 使用箭头键向下移动到 db_name = "" 这一行。
- 在引号之间键入 'issuetracker'。
- 键入 control-x。
- 键入 'y'。
- 键入 [回车]。
- 在浏览器中访问 localhost/~username/issue_tracker(其中 username 是您的 SUSE 登录名)。
系统设置
如果出现“PostgreSQL 类连接函数错误”
在 issue_tracker/config.php 文件中,将 $db_host = '';
和 $db_port = '';
设置为 ''
。当这些字符串为空时,PHP 将使用本地套接字而不是 TCP/IP 连接到 PostgreSQL。
并且
(以 root 身份) 检查名为 pg_hba.conf 的访问控制文件。在许多系统(RedHat/SUSE)中,它位于 /var/lib/pgsql/data。您可以通过 'find / -name pg_hba.conf' 找到它,并通过 'pico /var/lib/pgsql/data/pg_hba.conf' 进行编辑。在文件末尾,您可以粘贴以下两行:
host all all 0.0.0.0 255.255.255.255 trust
local all all trust trust
所有其他行都应该用 '#' 注释掉。现在重新启动 PostgreSQL(以 root 身份)'/etc/init.d/postgresql restart'
最后一种可能性
您可能需要在 /var/lib/pgsql/data/postgresql.conf 中设置 'tcpip_socket = true'。将 issue_tracker/config.php 更改为使用 $db_host='localhost'; 和 $db_port='5432';。最后重新启动 PostgreSQL。