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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top