9

PHP の対話型モードphp -aは非常に便利ですが、起動してすぐにいくつかのコマンドを実行して環境を初期化できれば、はるかに便利です。オートローダーの実行、use名前空間のショートカットの設定など。

次に例を示します。

include "../../autoloader.php";
use App/Foo/Bar as Bar;

これらの行をテキスト ファイルに追加してinitialize.txt、インタラクティブ モードを開始できるのではないかと考えましphp -a < initialize.txtたが、うまくいきませんでした。

誰でもこれを行う方法を知っていますか?

4

2 に答える 2

6

Tomas Creemers が述べたように、auto_prepend_file PHP フラグを使用してファイルを自動要求する必要があります。例えば:

<?php
# foo.php
function bar() { print "Bar.\n"; }

次のように PHP インタープリターをロードできます。

[hron@merlin tmp ] $ php -d auto_prepend_file=$PWD/foo.php -a
Interactive shell

php > bar();
Bar.
php >

または、ファイルを手動で含めることができます。

[hron@merlin tmp ] $ php -a
Interactive shell

php > include 'foo.php';
php > bar();
Bar.
php > 
于 2013-08-18T23:19:00.927 に答える
2

php.ini 設定を使用してauto_prepend_file、実際のファイルの前に常に実行する必要があるファイルを指定できます。

Interactive shellのドキュメントによると、この設定はそこでも有効です。

PHP を起動するたびにこの初期化を行いたくない場合は、php.ini のコピーを作成し (たとえば、「php.ini-interactive」と呼びます)、その構成ファイルを-cオプションで指定することをお勧めします。 : php -c /path/to/php.ini-interactive -a.


(この回答と質問自体に関するいくつかのコメントの後に、この部分を追加しました。)

PHPインタラクティブシェルのドキュメントページのコメント(「Ryan P」による)によると、php -a常に同じことをするとは限りません:

インタラクティブ シェルとインタラクティブ モードは、名前と機能が似ていますが、同じものではありません。

「php -a」と入力し、「Interactive Shell」の応答に続いて「php>」プロンプトが表示された場合は、対話型シェルを使用できます (PHP は readline サポート付きでコンパイルされています)。代わりに「インタラクティブ モードが有効になっています」という応答が返された場合は、インタラクティブ シェルを使用できないため、この記事は適用されません。

「php -m」をチェックして、出力に readline がリストされているかどうかを確認することもできます。リストされていない場合は、対話型シェルがありません。

対話モードは、基本的に、stdin をファイル入力として php を実行するようなものです。コードを入力するだけで完了 (Ctrl-D) すると、php は入力した内容を通常の PHP (PHTML) ファイルであるかのように実行します。

インタラクティブシェルを使用できる PHP のコピーがありません。どうやらインタラクティブモードしかありません。私はテストしました (以下を参照) で構成されたファイルauto_prepend_file 対話モードで実行されることを確認できます。ただし、私と同じ症状が発生した場合は、使用を再検討することをお勧めします。

tomas@debianvm:~$ cat /tmp/prepend.php
<?php

echo 'cookies are people too!';
tomas@debianvm:~$ grep auto_prepend_file /etc/php5/cli/php.ini
auto_prepend_file =
tomas@debianvm:~$ grep auto_prepend_file /etc/php5/cli/php.ini-interactive
auto_prepend_file = /tmp/prepend.php
tomas@debianvm:~$ php -a
Interactive mode enabled

tomas@debianvm:~$ php -c /etc/php5/cli/php.ini-interactive -a
Interactive mode enabled

cookies are people too!
Segmentation fault
tomas@debianvm:~$ php --version
PHP 5.4.4-14+deb7u2 (cli) (built: Jun  5 2013 07:56:44)
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2012 Zend Technologies

(その最後の対話モード実行でのキーボード入力は、Ctrl-d に続く return のみです。)

于 2013-08-18T00:54:03.787 に答える