[PHP-dev 1258] Re: PHP-4.1.3から、cli版で作成してPHPコマンドで、php.iniを読み込めない

hdtank hdtank @ gmail.com
2006年 5月 27日 (土) 09:49:12 JST


しみずです
/* main.c */
int main(int argc, char **argv)
{
    int i = 0;
    for(;i<argc;i++){
        printf("%d [%s]\n", i, argv[i]);
    }
    return 0;
}
gcc -o main.o main.c

gcc-3.2.2 redhat9の場合
./main.o -a -b -c/path/to/ini -c /path/to/ini -c /path/to/ini
0 [main.o]
1 [-a]
2 [-b]
3 [-c/path/to/ini]
4 [-c]
5 [/path/to/ini]

VC++の場合
0 [main.exe]
1 [-a]
2 [-b]
3 [-c/path/to/ini]
4 [-c]
5 [/path/to/ini]

sapi/cli/getopt.c
では
-c/path/to/ini
を解釈してパースします。また
-c /path/to/ini (argv[n] = "-c", argv[n+1] = "/path/to/ini"の場合)でも
正常にパースするようになっており
5.1.2, 5.1.3, 5.1.4に
ファイルの差はありませんので
考えにくいですが、
上鍵さんが言っておられる

argv[n] に「"-c <PATH>"」

が入っている?のではないかと疑ったりしています。
この場合phpのgetopt.cでは
-c/path/to/iniと同じように解釈して
opt_charは'c'に
optargは
/path/to/ini
を期待しているのですが
 /path/to/ini
で解釈すると思います。
(もっともこの場合だと、argc = 1, argv[0] = "全部"にならないところが気になりますが)

いずれにしても
phpのgetopt.cで吸収させる場合
<command> <arg>より
<command><arg>の方が
気持ち悪いですが無難です

とりあえず上のソースを実行して
どんな値がargvに入るかを確認してみれば
解決の糸口になると思います。

上鍵さんへ:こちらgcc4.xの環境無いので
出来たら試してみてください。


PHP-dev メーリングリストの案内