• 締切済み

自分はオープンできない?

実行中のスクリプトファイルが自分自身をオープンするのは、読み込みですらムリなのでしょうか? open(F, $ENV{'SCRIPT_NAME'});

  • Perl
  • 回答数1
  • ありがとう数3

みんなの回答

  • tailkuppa
  • ベストアンサー率53% (52/98)
回答No.1

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 して何が入っているか確認すれば、見当がつくかもしれません。 しかし、自分自身を何に使うのでしょうか? 自分自身を読み込むことにあまり意味があるとは思えないのですが...。 余計なお世話かも知れませんが、自分の書き換えをするつもりとかだったら、少なくとも公開されているサーバでは止めた方が無難です。 ひょんなことでセキュティホールになりかねないですし...。

haporun
質問者

お礼

回答ありがとうございます。 SCRIPT_FILENAMEを参照すると、ローカルファイルアドレスが得られるようです。 開くことができました。 用途はというと、掲示板のソースをそのまま公開するというわけです。 もちろん、ソースディレクトリやパスワードを公開しては困るので、その行は適当に置き換えてから出力しますが。 でわでは。

関連するQ&A

  • ウインドー、オープンができない。

     このスクリプトを実行しても、新しいウインドーが開きません。 <script type="text/javascript"> var w1doc = windwo.open("http://kikitai.teacup.com/index.php3test.html",name="tesdom"); </script>  どこが、間違っているのでしょうか?

  • ファイルopenについて

    1----------------------------------- open(IN,">$past_file")|| &error; @lines2=<IN>; close(IN); >は書き込みopenということですが、この使い方で一応読み込みはできます。しかしやはり使い方としては間違っているのでしょうか?OSによってはできないとか・・ というのも、ないファイルをOPENするとき、読み込みではファイルはopenできませんよね。書き込みでopenすれば、ないファイルを自動で作成してくれます。今作っている掲示板だとこれは都合がいいので、こういう風に記述したいのですがだめでしょうか。

    • ベストアンサー
    • Perl
  • workbooks.openでフリーズ

    excel2007で作成されたVBAが記述されているファイルですが、 excel2010で実行するとフリーズします。 内容的には、ある2つのファイル内容を参照し、比較するというコードなのですが、 F8で一行ずつ実行していくと、workbooks.openメソッドでフリーズしていることがわかりました。 参照ファイルをローカルに置いて実行するとフリーズせずに処理できますが、 参照ファイルがサーバーにある状態では無理です。 これは、サーバーへのアクセス権限の問題なのでしょうか? でも、excel2007で成功した同じユーザーで実行しても、フリーズとなります。 ネットでいろいろと検索し、openメソッドの前にDoEventsメソッドを記述してみましたがフリーズしました。 どなたか回避策がわかる方、教えてください。お願いします。

  • ファイルオープンのサブルーチンを作っているのですが

    ファイルオープンのサブルーチンを作っているのですが、二つ目の「sub Open_DB_plus」が動作してくれません。 一つ目の「sub Open_DB」はとりあえずうまく動作したのですが、このルーチンを使ったファイルオープンを前後して使用すると以前に読み込んだファイルにより、ここで読まれるべき「@indata」が上書きされてしまうことに気づき、配列名まで指定できるよう二つ目の「sub Open_DB_plus」を作り始めたのですが、こちらは配列名を受ける「$list_name」に値が入りません。 ふたつめの「sub Open_DB_plus」を動作可能な状態にするにはどうしたらよいでしょうか? # EX:&Open_DB("$Dir","$Name",'.txt'); sub Open_DB{ my ($path,$pickfile,$type) = @_; $file_name = "$path/$pickfile"."$type"; open (FILE, "< $file_name"); @indata = <FILE>; close(FILE); }#-----END # EX:&Open_DB_plus('@indata',"$Dir","$Name",'.txt'); sub Open_DB_2{ my ($listname,$path,$pickfile,$type) = @_; $file_name = "$path/$pickfile"."$type"; $list_name = "$listname"; open (FILE, "< $file_name"); $list_name = <FILE>; close(FILE); }#-----END:

    • ベストアンサー
    • Perl
  • window openについて

    こんにちは、例えば以下のようなスクリプトがあったとします。 <html> <form name = serchform> <input type=text name=id><br> <input type=submit value=ID検索 onclick="openwin()"> <a href="javascript:open(1);"><Img Src="1.bmp"></a><br> <a href="javascript:open(2);"><Img Src="2.bmp"></a><br> <script type="text/javascript"><!-- function openwin() { a = document.serchform.id.value; url = "http://10.8.2.166/test/syuhou_kensaku.php?id="+a; mywin = window.open(url,"","width=1120,height=500"); } function open(select) { if(aa == 1){ alert("Test") url2="http://10.8.2.166/test/kensaku.php?msg="+Testです; mywin2 = window.open(url2,"",""); } } //--></script> このソースを実行すると、ID検索ボタンをクリックしても何も反応せず 1.bmpをクリックすると、Testとメッセージが表示され、画面左下に 警告マークが表示され、何も反応しません。 しかし、function open(select)を削除し、ID検索ボタンをクリック すると命令した処理を実行してくれます。 function openwin()を削除したらその逆も起きるのかと考えやって みたのですが、これについては上記と同じエラーでした。 なぜこのようになるのか原因が分かりません。 どなたかご存知の方がいらっしゃいましたら、アドバイスよろしく お願い致します。

  • DBの環境変数について

    OracleのユーザIDやパスワード等がかかれている環境設定専用のファイルを読み込み、 環境変数に読み込んだ内容をセットし、DBからデータを抽出するというサブルーチンを作っています。 ファイルを読み込み、環境変数にセットするところまでは動くのですが、 DBからデータを抽出することができません。 ただし、ファイルを読み込まずじかにサブルーチンの中に書き込んでいると正しく抽出することができます。 原因がまったくわからないので、アドバイスをお願いします。 -----以下環境ファイル読み込みプログラムの一部----- my $env_file= '○/△/■';←環境設定のファイルパス open(KAN, $env_file); while(<KAN>){ ($name, $val) = split(/=/, $_);←環境ファイルを=で分割 chomp($val); $kankyou{$name} = $val; ←取得したものをハッシュに } close(KAN); $ENV{'userid'} = $kankyou{'db_userid'}; $ENV{'passwd'} = $kankyou{'db_passwd'}; $ENV{'dbstring'} = $kankyou{'db_dbstring'}; このあとDBからのデータ抽出処理実行と続く ---------------------------------- ---ここから環境ファイルの内容--- db_userid=AAA db_passwd=BBB db_dbstring=CCC ↑この内容を下記の書き方でサブルーチンの中で直接書くと動く。 $ENV{'userid'} = 'AAA';

    • ベストアンサー
    • Perl
  • openとgetElementByidの使い方

    使用言語:javascript window.openでリモートのサイトを開き getElementByidで書き換えたいです。 サブウィンドウはログインページです。 現在のhtmlファイルの状態(一部伏字) <html> <head> <title>?</title> <script language="JavaScript"><!-- function disp(url){ win = window.open(url, "window_name", "width=900,height=500,scrollbars=yes"); window.setTimeout("",2000); win.getElementById( "pex_user_login_email").innerText="*****@****.***"; win.getElementById( "pex_user_login_password").innerText="*******"; } // --></script> </head> <body> <script>disp('https://****.jp/login')</script> </body> </html>

  • ファイルオープンの関数について教えてください。

    住所録保守のプログラムの宿題なんですが、ファイルオープンを関数にせずには動かせるのですが、関数にするとエラーが山のようにでます。参考書もよんでるのですがよくわかりません。明日提出なのでよろしくお願いします。                                     関数にする前の考えたプログラムは、                                            struct aaa{ char b                                                       char  c            };                                                         FILE *fp; struct aaa[100]; if((fp=fopen("c:/a.txt","rt"))==NULL) exit(0);です。                                         宿題は f_open(char *name,char *mode) を使って指定されたファイルを指定されたモードで開くという関数を作りなさい。                                                     引数 ポインタ nameはファイル名/mode はオープンモード 戻り値なし という問題です。 よろしくお願いいたします。

  • JavaScriptのwindow.openでリファラーが取得できない。

    <SCRIPT language="JavaScript"> <!-- function OpenWin(){ window.open("sample.cgi,"new","width=500,height=250"); } // --> <A href="#" onClick="OpenWin()">オープン</a> 上のようにsample.htmlのページ内にwindow.openのJavaScriptを書いています。 sample.cgi内に$ENV{'HTTP_REFERER'}を埋め込んでいるのですがリファラーが取得できません。 window.openの場合はリファラーは取得できないのでしょうか?

    • ベストアンサー
    • CGI
  • ファイルオープン

    MFCのVC++6.0を使用しています。 ファイルオープンのことなんですが FILE *f; char buf[2000]; if((fopen("C:●●,"w"))==NULL)){ MessageBox("ファイルオープンエラー"); } while(fgets(buf,1000,f)!=NULL{ //処理 } fclose(f); } などで例えばリストボックスにファイルの内容を書き出したり はできます。 私の行いたいことはそのままファイルを開くということです。 例えばエクセルなどのファイル○○.XLSなどを開いたときに何かを 媒体にせずにそのまんま新ウィンドウでエクセルとしてファイルを 開くということです。どうすればいいのか調べてもわかりません。 教えて下さい。

専門家に質問してみよう