[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 メーリングリストの案内