質問

私は、として実行できる非常にシンプルな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にいくつかの関数またはクラスファイルがあります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top