【发布时间】:2009-06-24 07:10:27
【问题描述】:
我在 apache2 服务器上的许多域上运行相同的 php 脚本。只有部分文件在域之间更改,其余文件始终相同。现在,每次设置新域时,我都会复制所有文件,但我真的很想将这些通用文件放在一个地方,这样任何更改都会影响所有域。
我曾想过使用一堆符号链接来指向公共文件。这是一个好的方法,还是我可以对 php 脚本或 apache 配置文件进行一些简单的编辑以提高效率?
谢谢!
【问题讨论】:
我在 apache2 服务器上的许多域上运行相同的 php 脚本。只有部分文件在域之间更改,其余文件始终相同。现在,每次设置新域时,我都会复制所有文件,但我真的很想将这些通用文件放在一个地方,这样任何更改都会影响所有域。
我曾想过使用一堆符号链接来指向公共文件。这是一个好的方法,还是我可以对 php 脚本或 apache 配置文件进行一些简单的编辑以提高效率?
谢谢!
【问题讨论】:
我做这种事情的方式是创建一个“公共”目录,我将所有可以在每个站点之间共享的文件放置在其中。然后,我只需将它们包含在需要它们的任何地方。
这非常好,因为允许跨多个站点添加功能。
【讨论】:
我建议将通用代码抽象为一组“库”脚本。将它们放在一个公共目录中,并通过修改 PHP 的 include_path 变量使其可用。这意味着您很可能不必修改当前脚本,同时仍无需拥有多个副本。
此路径可能(并且可能应该)在您的公共目录之外。这不会让外部用户直接访问您的网站,从而增强网站的安全性。
【讨论】:
这可能有点棘手,因为应用程序几乎需要知道您正在执行此操作。 IME,当您可以将应用程序分为两个单独的目录树中的公共代码和实例代码时,它的效果最好。公共代码也不需要做任何愚蠢的事情,比如包含一个必须在实例树中的文件。
加载通用代码的单一入口点也是一个很大的好处,因为这样您就可以链接一些非常小的文件:实例代码在它自己的目录中包含一个;该文件包括实例代码之外的文件; 那个文件然后加载公共代码的入口点文件,或者加载另一个。现在这只是一种方法,但这意味着您只有 一个 需要知道公共代码在哪里的文件(因此您可以在需要时以最小的努力移动它),并且如果你做得对,所有不同的实例代码树都会加载它,尽管是间接的。
【讨论】:
您可以有一个位于所有站点之上的库目录,以及一个配置文件,该文件说明您的站点默认应包含哪些库文件。然后,您可以在每个站点中拥有另一个覆盖全局配置的配置文件。这些配置文件可用于生成 include('../../lib/*.php') 语句来构建每个站点所需的基本功能工具包。
some_high_level_directory/
-> lib/
->*.php (library files)
-> config.php (global library includes)
-> site_1/
-> config.php (library includes that only relate to site_1)
-> www/
-> site_2/
-> config.php (library includes that only relate to site_2)
-> www/
-> etc, etc
希望这是有道理的... :)
【讨论】: