[PHP-users 11857] Re: コマンドライン版PHP でカレントのファイルを読み込ませたい

吉塚 陽子 php-users@php.gr.jp
Thu, 28 Nov 2002 10:52:56 +0900


吉塚です。

重松さん、Mashikiさん 早速のご回答ありがとうございます。
お二方の案を実験してみました。

重松さんの案
> 場当たり的対処でしょうが、不精をせずに、include/require の際に
> フルパスを書いたらいいのではないでしょうか。
> 
結果1、ini_set( "include_path", ".:/usr/local/php/phplib" ) ; 指定有
require( "/Full_Path/local.inc" ) ;
require_once( "/Full_Path/local.inc" ) ;
require( "local.inc" ) ;
require_once( "local.inc" ) ;
の4パターンで実行すると、いずれも以下のエラーが発生します。
  Fatal error:Cannot redeclare class db_example in
 /home/postuser/public_html/sample/local.inc on line 12
/usr/local/php/phplib/local.inc を先に読み込んだため、カレントのlocal.incは
2重定義になるようです。

結果2、ini_set( "include_path", ".:/usr/local/php/phplib" ) ; 指定無
require( "/Full_Path/local.inc" ) ;
require_once( "/Full_Path/local.inc" ) ;
require( "local.inc" ) ;
の3パターンで実行すると、上記と同じのエラーが発生します。
require_once( "local.inc" ) ;
で実行すると、/usr/local/php/phplib/local.inc を読みに行くようです。


> どのようにスクリプトを実行しているでしょうか?
> 
> $ cd target_path
> $ ./xxx.php
ファイル先頭に、#!/usr/local/bin/php -q を記載して、以下の様に実行していま
す。
$ cd target_path
$ xxx.php 変数

Mashikiさんの案
> 
> 案1
>  ini_set( "include_path", dirname($argv[0]).":/usr/local/php/phplib" )
>  
/usr/local/php/phplib/local.inc を読みに行くようです。

> 案2
>  $ php -d 'include_path=/dir1/dir2:/usr/local/php/phplib' \
>          /dir1/dir2/xxx.php
> のように実行する
> 
先頭の#!/usr/local/bin/php -q を削除して、実行したところカレントの
local.inc が読み込まれました。
期待する結果が得られました。

では、なぜ先頭に #!/usr/local/bin/php -q を記載するとカレントのlocal.inc 
が読み込まれないのでしょうか?