2009-09-23 4 views
16

У меня есть PHP-скрипт, который включает в себя одну или две другие библиотеки, это зависит от использования инструкции 'include'. Чтобы сделать его более легко переносимым, я хотел бы как-то «скомпилировать» сценарий, а include d библиотеки он вписывает в один PHP-скрипт (так же, как ack включает все его зависимости в Perl в одном файле). Есть ли простой способ сделать это в PHP?Слияние нескольких PHP-скриптов в один файл

Разъяснение: Компиляция в окна исполняемого файла может быть (частью) является приемлемым решением, но сценарий все еще должен работать на * Nix, где лучше иметь PHP исходный код «#!/usr/bin/env php» в верхней ,

Я хочу, чтобы иметь возможность удалить один файл в $ PATH где-нибудь на любой ОС и заставить его работать, не требуя дополнительных библиотек PHP для установки.

ответ

11

Новые версии PHP поддерживает концепцию, подобную банку файлов в Java. Взгляните на phar. Вы можете упаковать все ваши файлы приложений в один архив и запустить их.

+0

Phar выглядит надежно ... –

+7

'PHAR' произносится как мы говорим' Mouse' на арабском языке. Это очень смешно: D –

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')

+0

До сих пор существует как минимум четыре файла, три из которых являются только библиотеками. Должен ли пользователь отбрасывать их все в '/ usr/bin /', или им нужно выработать свой параметр 'include_path' и поместить три библиотеки в одну из этих папок? Я не хочу, чтобы пользователи выбирали этот выбор. Я просто хочу один файл. –

+0

Это будет вашим лучшим выбором, нет инструмента для того, чтобы делать то, что вы хотите. Плохо не было. – MitMaro

+0

У вас не может быть ни одного файла, если вы не сделаете то, что сказал jcinacio. Но нет причин беспокоиться о/usr/bin и include_path. Просто поместите все необходимые файлы, двоичные файлы и т. Д. В один каталог и включите все в этом каталоге относительно __FILE__ (волшебная константа, представляющая путь к этому текущему файлу). – Josh

3

Вручную, вы просто удалите все ссылки include/require и «соедините» файлы вместе. , вы должны также разделить открытые и конечные теги ('<? Php', "?>") Перед конкатенацией и добавить их в окончательный файл.

Для одного или двух небольших библиотек, она должна - мы надеемся, - «просто работать» ...

+0

У меня есть скрипт, который что-то делает в этом направлении, но он получает немного волосатый с пространствами имен. –

+0

Если кто-то это делает, не забудьте проверить, будет ли возвращен какой-либо из ваших включенных файлов - что будет работать, если вы сделаете это по очереди, но не в том случае, если все они находятся в одном большом файле. – amurrell

1

Вы можете написать собственный сценарий, который открывает все файлы, удаляет открывающие и закрывающие теги, и сцепляет их вместе и сохраняет как один файл. должно быть довольно легко сделать.

Или вы можете использовать компилятор php. Это будет немного больше, чем то, что вы ищете, но если вам нужен только один файл, вы запускаете проект dev через один из них.

Вы также можете иметь возможность использовать встроенный в PHP байт-код компилятора скомпилировать все в байткод и вставить его в одном файле.

2

phc позволяет это. Просто запустите его с флагом --include, и он объединит весь ваш код (ну, каждый аргумент include, require и т. Д.) В один файл PHP.

Если вам нравится, он также может скомпилировать его, но это не обязательно, чтобы объединить все их в один файл.

+0

С 2015 года ПМСП появляется заброшенным (последнее совершение 2 года назад, июль 2013 года). – bishop

+0

'phc' определенно оставлен. –

6

РНР пакеты ScriptJoiner или даже лучше JuggleCode может помочь:

Оба построены на PHP-парсер (http://packagist.org/packages/ nikic/php-parser), что упрощает присоединение к скриптам.

+0

JuggleCode заменил ScriptJoiner по состоянию на октябрь 2012 года. – bishop

Смежные вопросы