2009-09-23 13 views
16

Ho uno script PHP che include una o due altre librerie da cui dipende utilizzando il 'include' dichiarazione. Per renderlo più facilmente trasportabile, vorrei in qualche modo 'compilazione' la sceneggiatura ei include d librerie in un unico script PHP (nello stesso modo in cui ack include tutte le sue dipendenze Perl in un unico file). C'è un modo semplice per farlo in PHP?fusione di più script PHP in un unico file

Chiarificazione: compilazione in un eseguibile finestre possono essere (parte di) una soluzione accettabile, ma lo script deve ancora funzionare su * nix, dove è meglio avere PHP codice sorgente con '#!/usr/bin/env php' in alto .

voglio essere in grado di rilasciare un singolo file nel $ PATH da qualche parte su qualsiasi sistema operativo e farlo funzionare senza bisogno di librerie PHP in più per essere installato.

risposta

11

recenti versioni di PHP supportano un concetto simile a vaso file in java. Dai uno sguardo allo phar. È possibile comprimere tutti i file dell'applicazione in un unico archivio ed eseguirlo.

+0

Phar sembra fiducioso ... –

+7

'PHAR' è pronunciato come si dice' Mouse' in arabo. È molto divertente: D –

4

Non esiste un modo integrato per farlo. Consiglierei di impacchettare il codice in una directory e di distribuirlo in questo modo. Lo faccio con PHP, metto il codice in una directory "something.module", e poi ho iterato attraverso una directory dei moduli, incluso il file principale sotto ogni directory .module. Ma qualcosa di più semplice, si può solo avere una struttura come:

my_package/ 
    my_package.php 
    include1.php 
    include2.php 

my_package.php farebbe include(realpath(dirname(__FILE__).'/inclue1.php')). Tutti gli altri scrits sarebbe solo dovuto include('my_packahe/my_package.php')

+0

Finora ci sono almeno quattro file, tre dei quali sono solo librerie. L'utente dovrebbe lasciarli tutti in/usr/bin/', oppure devono elaborare le loro impostazioni' include_path' e mettere le tre librerie in una di quelle cartelle? Non voglio che gli utenti debbano fare questa scelta. Voglio solo un singolo file. –

+0

Questa sarà la soluzione migliore, non esiste uno strumento per fare ciò che vuoi. Per il male non c'era. – MitMaro

+0

Non puoi avere un singolo file se non fai quello che ha detto jcinacio. Ma non c'è motivo di preoccuparsi di/usr/bin né di include_path. Basta mettere tutti i file, i binari, ecc. Necessari in una directory, e includere tutto in quella directory relativa a __FILE__ (una costante magica che rappresenta il percorso del file corrente) – Josh

3

manualmente, basta rimuovere tutti i riferimenti di include/richiedono, e "concatenare" i file insieme. dovresti anche rimuovere i tag di apertura e fine ('<? Php', "?>") Prima della concatenazione e aggiungerli nel file finale.

Per uno o due piccole biblioteche, dovrebbe - si spera - "solo lavoro" ...

+0

Ho uno script che fa qualcosa in questo modo, ma ottiene un po 'peloso con gli spazi dei nomi. –

+0

Se qualcuno lo fa, ricorda di controllare se qualcuno dei tuoi file inclusi dovrà tornare - il che funzionerebbe se lo fai a turno, ma non se sono tutti in un unico file grande. – amurrell

1

Si potrebbe scrivere uno script personalizzato che si apre tutti i file, rimuove i tag di apertura e di chiusura, e li concatena insieme e salva come un file. dovrebbe essere abbastanza facile da fare

Oppure è possibile utilizzare un compilatore php. Farà un po 'più di quello che stai cercando, ma se vuoi solo un file, esegui il tuo progetto dev attraverso uno di questi.

Si potrebbe anche essere in grado di utilizzare il costruito in PHP bytecode compilatore per compilare tutto in bytecode e incollarla in un unico file.

2

phc consente questo. Basta eseguirlo con il flag --include e unirà tutto il codice (beh, ogni argomento a uno include, require, ecc.) In un singolo file PHP.

Se lo desideri, può anche compilarlo, ma non è necessario combinarli tutti in un unico file.

+0

A partire dal 2015, PHC appare abbandonato (ultimo commit 2 anni fa, luglio 2013). – bishop

+0

'phc' è definitivamente abbandonato. –

Problemi correlati