3

このことを考慮:

#!/usr/bin/php
<?php
class Foo {
        static function bar () {
                echo "Foo->bar\n";
        }
}
if (PHP_SAPI === 'cli') {
        Foo::bar();
}
?>

これは CLI から実行できますがinclude、たとえば CGI で実行する PHP スクリプトで実行すると、シバンが出力されてしまいます。

私は単純なスクリプトがコンパクトclassであるのが好きです:別の「lib」ファイルにその部分を入れて、 CLI で使用するための単純なラッパーを用意できると思います。しかし、インクルード パスなどを気にせずに、すべてを 1 か所にまとめておきたいと思います。

ob_*これは、シバンをキャプチャするために-wrapせずに可能includeですか (これが可能であれば)、またはとにかくこれらすべてを 1 つのファイルに詰め込むのはばかげていますか? 代替案/考え/ベストプラクティスを歓迎します!

編集: スクリプトを に入れたいPATHので、 で呼び出すのは避けたいと思いphp file.phpます。@misplacedmeの回答への私のコメントを参照してください

4

1 に答える 1

1

実は簡単です。
シバンを削除し、スクリプトを実行するときに、 代わりに
php scriptname.php ORとして実行します/path/to/php scriptname.php

./scriptname.php

実行php script.phpすると、現在のディレクトリのみ、または PATH 内の任意のディレクトリが検索されます。絶対にそのように実行する必要がある場合は、追加してください。 export PATH=$PATH:/path/to/php/script/folder(bashで)
スクリプト内でフルパスを使用していない限り、インクルードが台無しになります。
何をするにしても、どこかで完全なパスを使用する必要があります。

于 2013-07-25T13:53:32.227 に答える