7

我写了一个我想分发的小型 PHP 应用程序。我正在寻找最佳实践,以便可以轻松地将其安装在大多数虚拟主机上。

简而言之:这是一个简单的工具,可以让人们在使用密码登录后下载文件。

所以我的问题是:

1)我应该如何处理配置值?我没有使用数据库,所以配置文件似乎合适。我知道其他 php 应用程序(例如 Wordpress)使用定义,但它们是全局的,并且名称可能会发生冲突。(显然,全局变量也有同样的问题。)我查看了 PHP 内置的“ini”文件机制。它只允许在顶部添加注释——所以你不能轻易地注释每个设置——你不能用“php -f”来验证语法。其他选择?

2)如何处理模板?应用程序需要抽出一个表格。可能带有错误消息。(例如“对不起,密码错误。”)我有一个带有 HTML 表单的类变量,但也允许使用外部模板文件(在配置中指定)。我做了一些简单的搜索和替换 - 例如 %SCRIPT% 到脚本的名称,%STATUS% 来保存错误消息。这感觉有点像重新发明轮子,但包括像 Smarty 这样的模板系统是矫枉过正的。(另外他们可能已经有一个模板系统。)其他选择?

3) i18n - 只有 3 个消息字符串,gettext 似乎没有被普遍安装。在配置文件中设置这三个字符串参数是不是一个坏主意?

4)如何最好地与其他框架集成?我的应用程序是一个单一的类。所以,我想我可以只包含一个显示类是如何被调用的 php 脚本。对于必须将其集成到另一个框架中的人来说,这将是一个起点,但对于那些对定制不感兴趣的人来说也可以。合理的?

5) GET/POST 参数 - 类查看 $_GET 和 $_POST 是不是不好的形式?在构造过程中是否应该将所有值传递给我的类?

谢谢。

4

3 回答 3

7

配置

您可以使用这样的 php 文件:

<?php
return array(
  'option1' =&gt; 'foobar',
  'option2' =&gt; 123,
  //and so on...
  );
?>

在主类中只需使用:

$config = (array) include 'path/to/config/file';

如果您打算将您的类作为一个组件分发到其他应用程序中,那么只需将配置数组/对象作为参数放在您的类的构造函数中,并将详细信息留给用户。

模板

对于如此简单的应用程序,您描述的方法应该足够了。请记住,一个人总是可以扩展您的类并用他自己的方法重载您的输出方法。

I10N

如前所述,对于 3 个变量,除了将它们存储为配置之外的任何东西都只是矫枉过正。

一体化

注释每个公共方法(甚至更好的是受保护的和私有的),并解释它们做什么以及需要哪些参数。如果将其与示例结合起来,对于大多数用户来说应该足够了。

获取与发布

您的班级使用密码,您甚至想过通过 GET 发送密码?;) 想想浏览器历史记录、引用标题等 - 您的用户密码将在那里可见。

于 2008-11-12T16:38:16.273 回答
2
  1. 配置可以是类实例的本地吗?或者你可以创建一个小类,你可以创建一个实例来查询配置值?此外,在您的应用程序名称前添加任何全局变量应该可以在某种程度上阻止冲突。

  2. 如果您的模板非常简单,只需编写一个简短的模板。这比试图解决人们使用任何第 3 方模板时遇到的问题要容易。它还可能简化许可问题。如果您开始担心他们已经拥有的东西,您将永远不会释放任何东西。组合太多了。

  3. 对于 3 个字符串?是的,以与您处理配置相同的方式进行操作。

  4. 良好的评论贯穿始终,并附有介绍您如何使用该课程的介绍。

  5. 我不这么认为。如果它困扰您,您可以使用默认参数首先使用给定的参数,然后搜索 GET/POST 值(如果没有提供)(尽管这可能是安全风险)

还有其他事情需要考虑。很多人都在共享主机上,因此无法控制他们的 php.ini 或他们的 php 版本。您需要确保只使用尽可能常见的功能。

一个例子是某些主机上没有启用短标签(您必须使用<?php ... ?>and<?php echo "..."?>而不是<? ... ?>or <?= "..." ?>),这可能是一个皇家 PITA。

于 2008-11-12T16:23:52.527 回答
1

除了 Krzysztof 的好建议:

  • <?php仅使用
  • 如果您使用可以禁用的功能,请使用function_exists()以确保它们可用。@missing_function()使 PHP 无声无息地死掉,而不会记录任何错误。
  • 您不能依赖可以通过php.ini. 用于ini_get()适应不同的设置。
  • 如果magic_quotes启用,则仅从您的输入副本中去除斜杠 - 不要修改全局数组!一些蹩脚代码的安全性可能依赖于这些斜线的存在。
  • 期望用户会盲目地从您的文档/网站中复制和粘贴代码。
于 2008-11-12T23:25:33.520 回答