[PHP-users 13828] Re: CGI版 php でcurrent directory を取得出来ない

Nakamura Kazuto php-users@php.gr.jp
Fri, 07 Mar 2003 15:56:01 +0900


中村です。

ずっと調査を続けています。CGI版の話なのですがよく見ると PHP の特徴
の1つである変数の自動分解がなされていない事に気づきました。パラメータ
付きで実行し、phpinfo() の結果で見ています。

_ENV["SCRIPT_FILENAME"] => /home/test/public_html/sample.cgi
_ENV["REQUEST_URI"] => /~test/sample.cgi?id=30
_ENV["SCRIPT_NAME"] => /~test/sample.cgi
_ENV["QUERY_STRING"] => id=30
_SERVER["QUERY_STRING"] => id=30

実はディレクトリ情報も正確に取得出来ています。じゃ何故 chdir 等が
動かないのか?理由がわかりません。CGI版の PHP をお使いの方はおりま
せんか…?

[環境]
'./configure' '--enable-mbstring' '--with-zlib' '--enable-ftp' 
'--without-mysql'  '--enable-mbregex' 
'--enable-discard-path' '--enable-force-cgi-redirect'

disable_functions => no value => no value
doc_root => no value => no value
register_argc_argv => On => On
register_globals => On => On
safe_mode => Off => Off
safe_mode_exec_dir => no value => no value
user_dir => public_html => public_html


>中村です。
>php-4.3.1 CGI版の話です。
>
>httpd から呼び出しているのですが current directory が変わらないで
>困っています。下記のサンプルで実験しています。コマンドラインから
>実行すると勿論うまく行きます。
>
>--- file chdir.cgi ------------------------------------
>#!/usr/local/bin/php 
><?
>  echo "Content-type: text/html\n\n";
>  $curdir = getcwd();
>  echo "1:$curdir<BR>";
>  if ( chdir("/home/kazuto/public_html/") == false) {
>    echo "chdir failed"; exit;
>  }
>  echo "chdir success<BR>";
>  $curdir = getcwd();
>  echo "2:$curdir<BR>";
>?>
>--- file end ------------------------------------------
>
>嘘ディレクトリを書くとちゃんと chdir は false になります。
>$curdir はいつでも空白で値が入りません。
>
>これを正常に動かすにはどうしたらいいのでしょう?
>#ファイル取得ルーチンを全て full path に書き直せば動きますが
>#激しく面倒なのでどうにかこれを動かしたいんです。

--
中村  和人  kazuto@sainet.or.jp