こんにちは。
perlのCGIでファイルをオープンする際のパス指定で悩んでいます。
cgiとは別のディレクトリにあるファイルをオープンしたいのですが、
このとき、
open(IN,"/home/XXX/YYY/ZZZ.dat");
というふうに絶対パスでオープンしようとすると、オープンできません。
一方、
open(IN,"../../../home/XXX/YYY/ZZZ.dat");
といった感じに相対パスにすると、オープンできます。
ファイルの場所は/home/XXX/YYY/ZZZ.datで間違いありませんし、
cgiとしてではなく、シェルから直接cgiプログラムを起動すると、
絶対パスでもオープンできます。
これはいったいどういうことが起こっているのでしょうか?
ご存知の方、ご解説願えないでしょうか。
No.2ベストアンサー
- 回答日時:
> それに、アクセス権の問題なら、パスの指定方法で違いは出ないように思えるのですが、そういった可能性もあるのでしょうか?
それもそうですね。すみません。
とりあえず、$!などのエラーメッセージはどうなってますか?
ほかには -e でファイルを見つけることが出来るのかどうか、とか。
原因もわからずに対応は出来ませんので。
この回答への補足
>とりあえず、$!などのエラーメッセージはどうなってますか?
そうですね。基本的なことをやっていませんでした。
表示させてみたところ、エラーは"Permission denied"でした。
・・・・ということはやっぱりアクセス権?
で、調べてみましたところ、パスの途中のディレクトリ(この場合XXX)に読み込み許可がないものがありました。
drwxr-x---
原因はきっとこれだと思います。ありがとうございました。
でも・・・・指定方法によってアクセスできたりできなかったりと、これってセキュリティホールじゃないんでしょうか???
それとも、アクセス権の設定って、所詮この程度なのでしょうか?
また疑問が生じてしまいました。
OSはSolarisです。
/etc/releaseは
Solaris Express Developer Edition 1/08 snv_79b X86
Copyright 2008 Sun Microsystems, Inc. All Rights Reserved.
Use is subject to license terms.
Assembled 24 January 2008
です。なにかわかりますでしょうか?
この件については、おそらくCGIとは別カテゴリになるかと思いますでので、
ひとまず締め切ることとします。
ありがとうございました。
No.3
- 回答日時:
シェルからは大丈夫なのにCGIスクリプトからはダメということは
サーバ(Apache?)が動いているコンピュータとシェルが動いている
コンピュータとが異なってマウントの位置が違っているとか...。
本当に合っているか
use File::Spec;
print File::Spec->rel2abs('../../../home/XXX/YYY/ZZZ.dat');
として調べてみたらどうでしょうか。
サーバの設定などによってはCGIの実行するディレクトリの起点が
ファイルのある場所と違う場合があります。
ありがとうございます。
コンピュータは一台だけです。
そういう可能性もあるのですね。
ひとまず原因はわかったのですが、新たな疑問が生じてしまいました・・・。
No.1
- 回答日時:
ZZZ.datのアクセス属性は、CGIで実行されるユーザーでアクセスできるようになってますか?
nobody(非SuExec)なら0606または0666になると思います。
あと、この場合は絶対パスではなくフルパスと呼びます。
相対パスという呼び方はURLでもシェルでも同じです。
この回答への補足
>ZZZ.datのアクセス属性は、CGIで実行されるユーザーでアクセスできるようになってますか?
はい、なってます。
ls -lで見ると、
-rw-r--r--
と、表示されています。
それに、アクセス権の問題なら、パスの指定方法で違いは出ないように思えるのですが、そういった可能性もあるのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) 図に示す階層構造で,現在のディレクトリ(カレントディレクトリという)が*印のディレクトリであるとき, 2 2022/11/16 10:55
- Visual Basic(VBA) VBAでの共有パスにつきまして 1 2023/03/04 17:24
- Windows 10 バッチファイルの記述法とルールについてアドバイスをお願いいたします。 1 2022/04/13 10:50
- CGI CGIが読み書きするデータファイルのパーミッションはさくらのインターネットでは何にするべき? 1 2023/05/02 16:44
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- Visual Basic(VBA) VBSで作成した相対パスのショートカットが他者と共有できません。 1 2022/09/05 11:20
- その他(コンピューター・テクノロジー) <a href="file:///フォルダ名/ファイル名">リンクテキスト</a>について 1 2023/04/06 22:40
- Perl perlのflock関数でロックをかけたままopen関数で何度もファイルを開きなおすことはできますか 3 2023/05/01 22:25
- UNIX・Linux cronの@rebootでのdateコマンドの実行につきまして 2 2023/06/11 16:23
- その他(IT・Webサービス) 301リダイレクトの使い方について 7 2022/04/05 17:50
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
WIn32API ディレクトリ内ファイ...
-
CGI実行環境下の.jsや.cssが動...
-
EXCELファイルに誰がアクセスし...
-
《エクセルVBA》「他の人が該当...
-
.cgi拡張子のままCGIファイルを...
-
ASP(IIS?)のエラーについて
-
Yomi-Search CGIですが・・・
-
実行可能な外部コマンドは?
-
FTPにて553エラー
-
CGIでソースがそのままでてしま...
-
perlからJavascriptを起動
-
FC2レンタルサーバーライトでの...
-
クライアントサイドとサーバー...
-
VBScriptで、ファイルから任意...
-
「EJBとServletの違い」「J2SE...
-
FC2にwebPatio設置の方法
-
初心者のCGI設置方法
-
BBS掲示板でのhtmlとcgiの関係...
-
自作CGIで、wwwサーバーエラ...
-
hp 送信する情報を・・・
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CGIが読み書きするデータファイ...
-
.htaccessを2つ以上設置した場合
-
FFFTPでアップロードできない?
-
CGI実行環境下の.jsや.cssが動...
-
WIn32API ディレクトリ内ファイ...
-
イントラネットのwebページのア...
-
JavaScriptdeファ...
-
CSVファイルのパーミッションは?
-
Apacheのcgi-bin
-
なぜフォルダ名がcgi-binなの?
-
階層を変えると動作しないです。
-
mimeの取得方法
-
CGIでjcode.plを読み込めなくな...
-
Cで作ったexeファイルをCGIとし...
-
SSIの日付の文字化けの対処方法...
-
AutoRinkの設定。
-
ディレクトリを指定してディレ...
-
CGI 設置方法
-
Rubyで特定のディレクトリ以下...
-
Borland C++ Compiler のセット...
おすすめ情報