2013-03-07 98 views
4

考虑到与以下结构的PHP应用程序:如何以兼容的方式将PHP文件包含在Phar和Phar中进行打包?

/ 
    lib/ 
     mylib.php 
    web/ 
     index.php // includes "mylib.php" with: require_once __DIR__ . "/../lib/mylib.php" 

我试图在同一时间以相同的源代码库涵盖以下情况:

  1. 没有的Phar:能使用该应用程序,DocumentRoot指向web/并将所有请求重定向到index.php
  2. 最小的Phar:能够产生一个只包含网/ index.php文件这将被保存为药业:网络/应用minimal.phar
  3. 完整的Phar:能产生既包含的lib目录和网/ index.php文件这将被保存为的内容药业:网络/应用full.phar

对于phar文件,所有请求都会被重定向到phar文件本身。

是否有可能实现所有这些用例而不必更改* require_once *?

我尝试不同的方法(相对/绝对),包括的lib/mylib.php从*网络/ index.php文件”,以及尝试一些技巧与的Phar ::安装()。没有我尝试成功

回答

1

简单地依靠include路径

不要做:。

require_once __DIR__ . "/../lib/mylib.php"; 

但:

require_once "mylib.php"; 

,并设置包括在脚本的开头路径:

set_include_path(__DIR__ . '/../lib/' . PATH_SEPARATOR . get_include_path()); 
+0

,将肯定有几个原因无法正常工作:1。 通过set_include_path()从内部药业将导致相同问题,'''__DIR__'''为''''phar://.../path/to/phar“'''而库不在PHAR文件中。 2.库通常在目录中包含大量不同的文件,你不能简单地添加每个目录,这将非常缓慢(路径中的所有条目将被扫描以找到该文件),并且不起作用:例如。 'Symfony/Component/Config/Loader/Loader.php'''''Symfony/Component/Templating/Loader/Loader.php'''包括'''Loaded.php''',真的吗? – 2013-03-11 11:05:07

+0

我说的是PSR-0兼容自动加载,当然你应该设置不同的包含路径,具体取决于你是否在phar中。 – cweiske 2013-03-11 11:22:40