Perl で CGI を作り、XREA というレンタルサーバーに置いています。


前回の質問で、/public_html 意外にデータファイルを置くと良いという事でしたので、さっそく置いてみました。http://q.hatena.ne.jp/1190370073

CGIは、/public_html/www.test.com/test.cgiに置いています。

そのcgiが作り出したファイルは、

/data/www.test.com/data.txt

に置こうと思います。そこでtest.cgiの中でdata.txtまでのパスを設定したいのですが、この場合、簡単な書き方はないでしょうか?今は、

$DATA_FILE = "../../data/www.test.com/data.txt";

と書いています。

回答の条件
  • URL必須
  • 1人20回まで
  • 登録:2007/09/21 20:15:45
  • 終了:2007/09/28 20:20:04

回答(2件)

id:b-wind No.1

b-wind回答回数3344ベストアンサー獲得回数4402007/09/21 20:45:28

ポイント35pt

XREA 限定であれば、

$DATA_FILE = "/vartual/${USER_NAME}/www.test.com/data.txt";

${USRE_NAME} は適宜置き換えて。

人力検索はてな

id:zachouR

ありがとうございます。

先ほど、

my $abs = File::Spec->rel2abs($0);

my @dirs = File::Spec->splitdir($abs);

を書いて、パスを調べていました。

さっそく使わせていただきます。

2007/09/21 20:52:42
id:hayashi6 No.2

hayashi6回答回数140ベストアンサー獲得回数12007/09/22 02:54:06

ポイント35pt

絶対パスでないとだめだと思います。http://www.google.com/

id:zachouR

ありがとうございます。

最終的にCGIが置かれている場所から、

$DATA_FILE = "../../data/www.test.com/data.txt";

の状態で試してみたところ、きちんと読むことができました。

2007/09/22 23:01:02
  • id:KUROX
    そのままで良いのでは
  • id:zachouR
    CGIの階層がひとつ深くなってしまったとき、

    $DATA_FILE = "../../../data/www.test.com/data.txt";

    とまた書き直さなきゃいけないな、と思いまして、、、。

    一番上からいきなり指定する方法はないでしょうか?
  • id:KUROX
    data.txtの拡張子にこだわらなら
    data.cgiとするだけで外部参照できないと思います。
  • id:zachouR
    あああ!その手がありましたか!
    そうですね、確かに!

    確かに拡張子を変えるだけで防ぐことができますね、、、。
    考えつきませんでした。
  • id:Bookmarker
    可能性は無いに等しいかもしれませんが、たまたま実行権が付いててこんなデータを放り込まれたら…

    >||
    #!/bin/sh

    echo "Content-Type: text/plain"
    echo
    cat $0
    ||<
  • id:zachouR
    すいません、どうなるんでしょうか?
  • id:Bookmarker
    自身(つまりデータ data.cgi の内容)を text/plain として表示してしまいます。
  • id:KUROX
    >たまたま実行権が付いててこんなデータを放り込まれたら…
    実行権がなければ問題なということですね。

  • id:Bookmarker
    > 実行権がなければ問題なということですね。

    たぶん。FreeBSD + Apache で試したら「500 Internal Server Error」になりました。

    でも、Windows のように読み取り権と実行権を切り離せないシステムでは、実行されちゃうんじゃないでしょうか。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません