Si prega di spiegare come creare stub Phar di PHP
Domanda
Sto cercando di creare un'applicazione CLI PHP molto semplice che può essere eseguita come a Phar File dalla riga di comando:
# php myProject.phar
Questo è quello che ho provato finora:
Il mio progetto
Il mio progetto è in una directory chiamata MyProject
E ha questi due file:
|-- createPhar.php
`-- bootstrap.php
bootstrap.php
Il bootstrap.php
Il file contiene questo:
<?php
print phpversion() . PHP_EOL;
print 'i am some script' . PHP_EOL;
Quando eseguo questo script dalla mia riga di comando Ubuntu:
# cd MyProject
# php bootstrap.php
Ottengo il seguente output:
5.3.2-1ubuntu4.9
i am some script
createphar.php
Il file createphar.php ha lo scopo di trasformare il progetto in archivio Phar. Sembra questo:
<?php
$phar = new Phar('MyProject.phar');
$phar->addFile('bootstrap.php');
$phar->setStub( $phar->createDefaultStub('bootstrap.php') );
Quando eseguo quella sceneggiatura ...
# php createPhar.php
... un nuovo file chiamato MyProject.phar
è creato nella directory del mio progetto.
|-- bootstrap.php
|-- createPhar.php
`-- MyProject.phar
Ora ecco il problema
Quando eseguo il file phar ...
# php MyProject.phar
... mi aspetto di vedere lo stesso lo stesso output che ho ottenuto quando ho eseguito il bootstrap.php
sceneggiatura.
Invece non vedo niente. Nessun output affatto. Questo implica che il mio bootstrap.php
lo script non viene incluso dallo stub predefinito creato da $phar->createDefaultStub('bootstrap.php')
Penso di essere fraintendendo come vengono creati Phars e i loro stub. Potresti, per favore, spiegare dove ho sbagliato.
Soluzione
Per rispondere alla mia domanda.
Il metodo delineato nella mia domanda, sopra, è un modo corretto per creare uno stub Phar / Phar.
Il motivo per cui non ha funzionato per me e fatto Il lavoro per Mario (vedi il suo commento sotto la domanda) è perché avevo installato Suhosin e dovevo modificare le impostazioni.
Risolto usando il tecnica delineata qui:
Per risolvere, mettere:
suhosin.executor.include.WhiteList = "Phar"
In /etc/php5/cli/php.ini
Altri suggerimenti
Potresti anche farlo in questo modo:
bootstrap.php;
<?php
function go() {
print phpversion() . PHP_EOL;
print 'i am some script' . PHP_EOL;
}
poi:
php -r "Richiedi 'phar: //myproject.phar'; go ();"
O non hai una funzione e eseguirà qualsiasi comando che hai lì dentro, ma in genere avresti alcune funzioni o file di classe nel PHAR.