18

コマンドラインからpharファイルとして実行できる非常に単純な PHP CLI アプリケーションを作成しようとしています。

# php myProject.phar

これは私がこれまでに試したことです:

私のプロジェクト

私のプロジェクトは というディレクトリにMyProjectあり、その中に次の 2 つのファイルがあります。

 |-- createPhar.php
 `-- bootstrap.php

ブートストラップ.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

ここで問題です

phar ファイルを実行すると...

# php MyProject.phar 

bootstrap.php...スクリプトを実行したときと同じ出力が表示されることを期待しています。

代わりに、何も見えません。まったく出力されません。これは、私のbootstrap.phpスクリプトが作成されたデフォルトのスタブに含まれていないことを意味します$phar->createDefaultStub('bootstrap.php')

Phar とそのスタブの作成方法を誤解していると思います。どこが間違っているのか説明してください。

4

2 に答える 2

11

私自身の質問に答えるために。

上記の私の質問で概説した方法は、phar / phar スタブを作成する正しい方法の 1 つです。

それが私にとってうまくいかず、マリオでうまくいった理由(質問の下の彼のコメントを参照)は、Suhosinをインストールして設定を微調整する必要があったためです.

ここで説明されている手法を使用して修正しました。

修正するには、次のように入力します。

suhosin.executor.include.whitelist="phar"

/etc/php5/cli/php.ini で

于 2011-07-12T22:55:29.697 に答える
0

次のようにすることもできます。

ブートストラップ.php;

<?php
function go() {
    print phpversion() . PHP_EOL;
    print 'i am some script' . PHP_EOL;
}

それから:

php -r "require 'phar://Myproject.phar'; go();"

または関数がなく、そこにあるコマンドは何でも実行されますが、通常は phar にいくつかの関数またはクラス ファイルがあります。

于 2011-06-13T21:07:13.963 に答える