将多个PHP脚本合并为一个文件

20
我有一个PHP脚本,使用“include”语句包含了一个或两个其他库,它依赖于这些库。为了更方便地移植,我想以某种方式将脚本和被包含的库“编译”成单个PHP脚本(就像ack将所有Perl依赖项包含在一个文件中一样)。在PHP中是否有简单的方法可以做到这一点? 澄清:编译成Windows可执行文件可能是(部分)可接受的解决方案,但脚本仍然需要在*nix上运行,在那里最好在顶部添加“#!/usr/bin/env php”的PHP源代码。
我希望能够将单个文件放入任何操作系统的$PATH中,并且无需安装额外的PHP库即可正常工作。
6个回答

13

PHP的较新版本支持与Java中jar文件类似的概念。请查看phar。您可以将所有应用程序文件打包到单个存档文件中并运行。


11
"PHAR" 在阿拉伯语中的发音类似我们说 "Mouse" 的发音。这很有趣 :D - Muhammad Gelbana

8

1
自2012年10月起,JuggleCode取代了ScriptJoiner。 - bishop

4

没有内置的方法可以做到这一点。我建议将您的代码打包成一个目录并以这种方式分发。我用PHP做到了这一点,我将代码放入一个名为“something.module”的目录中,然后遍历模块目录,在每个“.module”目录下包含主文件。但对于更简单的东西,您可以只有以下结构:

my_package/
  my_package.php
  include1.php
  include2.php

my_package.php 文件中将会 include(realpath(dirname(__FILE__).'/inclue1.php'))。其他的脚本只需使用 include('my_packahe/my_package.php') 即可。


到目前为止,至少有四个文件,其中三个只是库。用户应该把它们全部放在/usr/bin/中,还是需要找出他们的include_path设置并将这三个库放在其中一个文件夹中?我不希望用户必须做出这个选择。我只想要一个单一的文件。 - too much php
这将是你最好的选择,没有工具可以做你想要的事情。很遗憾没有这样的工具。 - MitMaro
除非你按照jcinacio所说的那样做,否则无法拥有单个文件。但是不必担心/usr/bin或include_path。只需将所有必要的文件、二进制文件等放在一个目录下,并使该目录中的所有内容相对于__FILE__(表示当前文件路径的魔术常量)进行包含即可。 - Josh

4

手动操作时,您只需删除所有包含/需要的引用,并将文件“连接”在一起。在连接之前,您还应该去除开放和结束标记(“<?php”,“?>”),并在最终文件中添加它们。

对于一个或两个小型库,希望这样做可以正常工作...


我有一个脚本,大致上是这样做的,但是命名空间有点混乱。 - too much php
如果有人这样做,请记得检查您包含的文件是否需要返回 - 如果您按顺序执行它们,则可以工作,但如果它们都在一个大文件中,则无法工作。 - amurrell

2

phc 可以实现这一点。只需使用--include标志运行它,它将组合您的所有代码(包括includerequire等每个参数)到一个单独的PHP文件中。

如果需要,它还可以编译它,但将它们全部组合到单个文件中并不需要编译。


截至2015年,PHC似乎已被放弃(最后一次提交于2013年7月,已有2年之久)。 - bishop

1

你可以编写一个自定义脚本,打开所有文件,删除开头和结尾的标签,将它们连接在一起并保存为一个文件。这应该很容易做到。

或者你可以使用PHP编译器。它会比你想要的多做一些事情,但如果你只想要一个文件,你可以通过其中一个来运行你的开发项目。

你也可以使用内置的PHP字节码编译器将所有内容编译为字节码并将其放入一个文件中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接