- 締切済み
自分はオープンできない?
実行中のスクリプトファイルが自分自身をオープンするのは、読み込みですらムリなのでしょうか? open(F, $ENV{'SCRIPT_NAME'});
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- tailkuppa
- ベストアンサー率53% (52/98)
CGI 以外の環境では、SCRIPT_NAME って環境変数はふつう設定されていないので。 CGI のことだと仮定します。 自分自身を読み込んで表示させることは可能です。 が、例示されている方法では、通常は出来ないと思います。 open(F, "スクリプトの名前"); のように、直接名前を指定すれば可能だと思います。 $ENV{'SCRIPT_NAME'} が問題です。 この中には、「クライアントからWebサーバにアクセスする場合のファイルの位置」が入っています。 スクリプト自身のURL から"http://ホスト名" を除いた形式です。 ところが、普通Web サーバではさまざまな事情から、SCRIPT_NAME で表される場所とは違う場所に実際のファイルを置いています。 CGI が実行される環境(perlスクリプトの実行環境)では、ファイルの位置指定は実際のファイル位置で指定しなければならないので、SCRIPT_NAME で表される場所ではそのファイルを読み込めない訳です。 $ENV{'SCRIPT_NAME'} の代わりに $0 を使えば読めるかもしれません。 (システムによっては$0も使えない可能性はあるけど) print して何が入っているか確認すれば、見当がつくかもしれません。 しかし、自分自身を何に使うのでしょうか? 自分自身を読み込むことにあまり意味があるとは思えないのですが...。 余計なお世話かも知れませんが、自分の書き換えをするつもりとかだったら、少なくとも公開されているサーバでは止めた方が無難です。 ひょんなことでセキュティホールになりかねないですし...。
お礼
回答ありがとうございます。 SCRIPT_FILENAMEを参照すると、ローカルファイルアドレスが得られるようです。 開くことができました。 用途はというと、掲示板のソースをそのまま公開するというわけです。 もちろん、ソースディレクトリやパスワードを公開しては困るので、その行は適当に置き換えてから出力しますが。 でわでは。