質問
私は、として実行できる非常にシンプルなPHPCLIアプリケーションを作成しようとしています ファー コマンドラインからのファイル:
# php myProject.phar
これは私がこれまでに試したことです:
私のプロジェクト
私のプロジェクトは呼ばれるディレクトリにあります MyProject
そして、それはこれらの2つのファイルを持っています:
|-- createPhar.php
`-- bootstrap.php
bootstrap.php
bootstrap.php
ファイルにはこれが含まれています:
<?php
print phpversion() . PHP_EOL;
print 'i am some script' . PHP_EOL;
Ubuntuコマンドラインからこのスクリプトを実行したとき:
# cd MyProject
# php bootstrap.php
次の出力を取得します。
5.3.2-1ubuntu4.9
i am some script
createphar.php
createphar.phpファイルは、プロジェクトをPhARアーカイブに変えることを目的としています。このように見えます:
<?php
$phar = new Phar('MyProject.phar');
$phar->addFile('bootstrap.php');
$phar->setStub( $phar->createDefaultStub('bootstrap.php') );
そのスクリプトを実行するとき...
# php createPhar.php
...呼ばれる新しいファイル MyProject.phar
私のプロジェクトのディレクトリに作成されます。
|-- bootstrap.php
|-- createPhar.php
`-- MyProject.phar
これが問題です
ファーファイルを実行すると...
# php MyProject.phar
...私が走ったときに得たのと同じ出力を同じように見ることを期待しています bootstrap.php
脚本。
代わりに私は何も見えません。出力はまったくありません。これは私のことを意味します bootstrap.php
スクリプトは、によって作成されたデフォルトのスタブに含まれていません $phar->createDefaultStub('bootstrap.php')
私は、pharとそのスタブがどのように作成されているかを誤解していると思います。私がどこで間違ったのかを説明してください。
解決
私自身の質問に答えるために。
上記の私の質問で概説されている方法は、PHAR / PHARスタブを作成する1つの正しい方法です。
それが私のために働かなかった理由と やりました マリオの仕事(質問の下の彼のコメントを参照)は、私がスホシンをインストールし、設定を調整する必要があるためです。
を使用して修正しました ここで概説されているテクニック:
修正するには、put:
suhosin.executor.include.whitelist = "phar"
/etc/php5/cli/php.ini in
他のヒント
このようにすることもできます:
bootstrap.php;
<?php
function go() {
print phpversion() . PHP_EOL;
print 'i am some script' . PHP_EOL;
}
それから:
php -r "要求 'phar://myproject.phar'; go();"
または、関数がないため、そこにあるコマンドがすべて実行されますが、通常、PHARにいくつかの関数またはクラスファイルがあります。