分发一个小型PHP应用程序

时间:2008-11-12 15:56:41

标签: php distribution

我写了一篇我想发布的小PHP应用程序。我正在寻找最佳实践,以便能够以最小的麻烦安装在大多数虚拟主机上。

简单地说:这是一个简单的工具,让人们在用密码登录后下载文件。

所以我的问题是:

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

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

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

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

5)GET / POST参数 - 对于一个类来说,查看$ _GET和$ _POST是不好的形式?在施工期间是否应将所有值传递到我的班级?

感谢。

3 个答案:

答案 0 :(得分:7)

配置

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

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

在主要班级中只使用:

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

如果您计划将您的类作为组件分发到其他应用程序中,那么只需将config array / object作为参数放在您的类的构造函数中,并将详细信息留给用户。

模板

对于这种简单的应用,您描述的方法应该足够了。请记住,总是可以扩展您的类并使用自己的方法重载输出方法。

I10N

如前所述,对于3个变量而言,除了将它们存储为配置之外,只是过度杀伤。

集成

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

GET vs POST

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

答案 1 :(得分:2)

  1. 可以配置为类实例的本地吗?或者你可以创建一个小类,你可以创建一个查询配置值的实例?同时在你的应用程序名称前加上任何全局变量应该可以在某种程度上阻止冲突。

  2. 如果你的模板很简单,那就写一个简短的模板。这比试图抵御人们对任何第三方模板的问题要容易得多。它还可以简化许可问题。如果你开始担心他们已经拥有的东西,你将永远不会释放任何东西。组合太多了。

  3. 3个字符串?是的,就像你处理配置一样。

  4. 整篇文章都有好的评论,介绍了如何使用课程。

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

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

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

答案 2 :(得分:2)

除了Krzysztof的好建议外:

  • 仅使用<?php
  • 如果您使用可以禁用的功能,请使用function_exists()确保它们可用。 @missing_function()使PHP无声地死亡而没有记录任何错误。
  • 您不能依赖可以通过php.ini禁用/更改的内容。使用ini_get()来适应不同的设置。
  • 如果启用了magic_quotes,则只从输入的副本中删除斜杠 - 不要修改全局数组!一些蹩脚代码的安全性可能依赖于存在这些斜线。
  • 预计用户会盲目地从您的文档/网站中复制和粘贴代码。