2012-09-06 65 views
0

我有一套类和方法,我希望看到在任何给定的系统上使用PHP都可以访问,并且希望将它打包为扩展名,即使它不是用C语言编写的。类和方法也包含一个shell脚本或两个设置了SUID位的shell脚本。无论DOCUMENT_ROOT如何,课程都需要访问这些课程。PHP本机扩展

从我已经阅读auto_prepend选项php.ini.htaccess似乎是唯一的选择。有一个更好的方法吗?如果我使用auto-prepend(包括或需要一个我认为会导致auto-prepend再次触发的文件),我会遇到重新声明问题吗?

+0

我对某些任务使用auto_prepend脚本,但仅仅是因为每个声明都使用了'if(!function_exists'或'!defined('wrapper。 – mario

回答

2

看看命名空间! 您可以将所有类放在相同的名称空间中,而不会干扰系统的其余部分。

不要试图建立扩展,如果你想打包你的库,看看PHAR

+0

)名称空间并不真正解决手头的问题,这是为了确保这些类和方法**可用于整个系统的所有用途,它们绝对是编码方面的最佳实践,但并非真正适合手头的问题。打包图书馆绝对是我想要做的事情,但我不想在任何地方都要求这个代码应该更像是这个用例的语言的扩展 – wmarbut

+0

我在我的服务器上的多个站点上使用我的框架我确实做了ditribute但是在其上放置了一个符号链接每个站点,并且只有一个库“安装”一次。命名空间完成其余的部分 – JvdBerg

+0

原谅我的无知,但命名空间只是一个组织我理解的最好的策略。他们都是伟大的;我使用它们,但在你使用'include'或'require'之前,它们与你使用的方法/类没有任何关系。是否有某种魔术(我猜自动加载很好地实现),你正在使用它来使你的代码可用? – wmarbut

0

把你的类/文件放在你服务器的某个地方,并设置php.iniinclude_path也包括这些文件的位置。或者,如您所述,您可以使用auto_prepend_file来强制执行,但如果您不使用命名空间,则此VERY BAD IDEA。迟早你会面临名称冲突。仍然不确定为什么你不能全部转换成类并使用autoloading

+0

把它放在'include_path'中会使它可用,但它必须在每个文件中都需要''或'包含'。这段代码或多或少是语言的补充,应该以与实际扩展中的方法在全球范围内可用而不需要额外包含的方式相同。 – wmarbut

+0

是的,这是正确的。尽管如此,通过'auto_prepend_file'强制实现包含性能。这真的是你想达到的目标吗?需要时手动将其包含在内,有什么问题?为什么你不使用自动加载? –

+1

Log4PHP贪婪与自动加载,并有它自己的自动加载器,所以我不能用它的一些我的应用程序。我们*可以*将代码粘贴在'include_path'中并手动包含它,它将解决问题,但希望不要。虽然我很难证明这一点,但也许我会重新评估我们正在努力达成的目标。 – wmarbut