• ベストアンサー

下の階層のディレクトリーにファイルを作るには?

はじめまして。 最近、perlの勉強をはじめたばかりの初心者です。 初歩的なことだと思うのですが、分からないことがあったので教えて頂ければ幸いです。 メールアドレスを認証するためのCGIを作っています。 下記は$passwd.htmlという名前のファイルを作って、soudan.htmlの内容を書き込んで保存する部分のスクリプトです。 #乱数htmlを読み込む open(IN,">$passwd.html"); #相談htmlを読み込む open(HTML,"soudan.html"); while($line=<HTML>){ print IN $line }; #乱数htmlを閉じる close(IN); 実行してみるとcgiとおなじファイルに「$passwd.html」ができました。 cgiのあるディレクトリの下の階層にファイルを作りたいと思っていろいろ調べてみたのですが、どのようにしたらいいのかよく分かりませんでした。 cgiのあるディレクトリより下の階層にファイルを作るにはどうしたらいいのでしょうか? 詳しい方、教えて頂ければ幸いです。 あと、こちらのサイトも役立つと思うのですが、oerlのプログラミングで困ったときに相談できる掲示板やサイトなどがありましたら教えてください。

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

質問者が選んだベストアンサー

  • ベストアンサー
  • mendokusa
  • ベストアンサー率13% (359/2726)
回答No.1

">./kasou/$passwd.html" とかじゃダメですか

OKIaHUKUOKA
質問者

お礼

ありがとうございました。 やってみたらうまくできました。 初歩的な事がよく分からないので助かりました。 ありがとうございました。

その他の回答 (1)

  • masaboo
  • ベストアンサー率58% (7/12)
回答No.2

#乱数htmlを読み込む →「書き込む」だと思う open(IN,">$passwd.html"); →書き込みなのに「IN」は誤解を招くと思う #相談htmlを読み込む open(HTML,"soudan.html"); while($line=<HTML>){ print IN $line →ここに;がないと動かない }; →ここに;はいらない #乱数htmlを閉じる close(IN); ################# 添削みたいな真似して失礼いたしました。 >実行してみるとcgiとおなじファイルに「$passwd.html」ができました。 cgiとおなじディレクトリということですよね。 相対パスで指定した場合は、常にcgiのファイルがあるディレクトリが基準となります。 mendokusさんのおっしゃるとおり、">./kasou/$passwd.html"などとしてあげればよいと思います。もちろん、保存先のディレクトリは予め作成しなければいけませんが。それとも、「下の階層」というのは">../$passwd.html"のことでしょうか。 もし、ご提示のコードそのものが目的でしたら、ファイルのコピーでもいいと思います。

参考URL:
http://oshiete1.goo.ne.jp/kotaeru.php3?q=151014

関連するQ&A

  • .htaccessでアクセス制限をかけたディレクトリの下の階層のディレクトリのアクセス制限

    はじめまして、とあるWEBデザイナーです。 会社のサイトをホスティング会社にお願いして 専用サーバーで保守管理してもらっています。 表題の件なのですが、.htaccessでアクセス制限を かけたディレクトリの下の階層にある ディレクトリにアクセス制限をかけてID、パスワード を入力させるようにしたいのですが、 .htaccessについて調べてみたところ、 .htaccessはアクセス制限をかけた以下のすべての ディレクトリが有効範囲になるため、 すでにアクセス制限有効なディレクトリに 重複して設定することは出来ない ということが分かりました。 このようなケースの場合、ディレクトリに アクセス制限をかけるにはどうしたら よいのでしょうか? CGIなどでプログラムを組むのでしょうか? それともWebサーバー側で設定などするのでしょうか? 当方、フリーのCGIやPHPを少し改造できる程度です。 こういう場合、普通はどうされているのか、 どんな情報でもかまいませんので お教えいただけると幸いです。

  • ファイル転送(ディレクトリごと)

    ディレクトリごと、LinuxサーバからUnixサーバへ ファイル転送をしたいのです。 ただし、ファイルではなくて ディレクトリごとなのです。 通常のftp >open xx.xx.xx.xx >passwd xxxx っと言う感じでftp接続はできますが、 ディレクトリごとはftp転送できますか? ご存知の方、お教え願えないでしょうか? よろしくお願いいたします。

  • cgiでhtmlファイルを読み込みたい

    cgiでhtmlファイルを読み込み、状況に応じてcgiで内容の修正や追加をして表示させたいのですがどうしても元ファイルを読み込めません。 IN = "○○.html"; $line = open(IN, "r"); とか $line = opne IN, "○○.html"; それに $line = "○○.html"; open(IN, $line); @line = <IN>; など調べて出てきたもの一通りやってみたのですが、どうしても読み込みができません。 どうすればファイルの読み込みができるのでしょうか。 仕事でどうしてもやらなければならないので、ご存じの方お助けください。

    • ベストアンサー
    • CGI
  • find関数が1階層(カレントディレクトリ)にしか利きません。

    find関数が1階層(カレントディレクトリ)にしか利きません。 Active Perl+MS-DOS(WindowsXP)の環境です。 深い階層を持つディレクトリAで  find(\&dirfiletotal,'.'); を実行し、特定のファイル名を検出しています。 なぜかカレントディレクトリ(A)にあるファイルに対してしか動作しません。(結果は正常です。) find関数は再帰的、つまり下の階層も含めてファイル検出するのだと思っていましたが、間違いでしょうか? もし間違いであれば、どのように書き変えればいいか、ヒントをいただけると大変助かります。 どうぞ宜しくお願い致します。

    • ベストアンサー
    • Perl
  • サブディレクトリからファイルやディレクトリを上の階層へ移動する.2

    D=ディレクトリ(フォルダ) F=ファイル D1 ├ D2 │ └ F1 └ D3   └ D4     ├ F2     └ F3 先ず例えば指定したディレクトリをD1とした場合、 D2、D3、はディレクトリとみなしサブディレクトリは D2、D3、以降に保存されているディレクトリをサブディレクトリとみなします。 この場合D4がサブディレクトリにあたるという事になります。 保存されているファイル、フォルダの階層がこの様な内容だった場合、 サブディレクトリであるD4から、F2、F3を上の階層へ移動させる(D3へ移動させる)方法を探しています。 D1 ├ D2 │ └ F1 └ D3   ├ F2   ├ F3   └ D4 ↑ちなみに作業終了後はこのような状態になっていれば良い。 尚、その際D4は削除されてもされなくとも構いません。 このような階層内容のフォルダが複数あるので 指定したディレクトリに対しこのような動作を自動的に行ってくれると望ましい。 若干分かり難いかもしれませんが、この様な動作や 又、似たような動作を指定したディレクトリに対し行ってくれるツールや方法を探しています。 ご存知の方、心当たりのある方、回答していただけると幸いです、よろしくお願いします。 以前も似たような質問をしたのですが解決に至る回答は得られませんでした。 なので再度質問させてもらいました、何卒よろしくお願い致します。

  • ディレクトリ全てのファイルを読み取るには?

    フリーのCGI掲示板を使ってます。ディレクトリ内に複数のログファイルがあるので、一括して編集・削除ができるように管理部分を改造したいのでアドバイスをお願いします。 一応、readdir関数でディレクトリ内にある全てのファイル名を取得でることは分かりましたが、open関数で全てのファイルを読み取らせる方法がわかりません。 open DIR "./log"; @files = readdir DIR; close DIR; #以下、オリジナルのソースです。 open(IN,"$logfile") || &error("Open Error: $logfile"); while (<IN>) { my ($no,$dat,$nam,$eml,$sub,$com,$url,$hos) = split(/<>/); #途中略 } close(IN);

    • ベストアンサー
    • Perl
  • サブディレクトリからファイルやディレクトリを上の階層へ移動する

    D=ディレクトリ(フォルダ) F=ファイル D1 ├ D2 │ └ F1 └ D3   └ D4     ├ F2     └ F3 先ず例えば指定したディレクトリをD1とした場合、 D2、D3、はディレクトリとみなしサブディレクトリは D2、D3、以降に保存されているディレクトリをサブディレクトリとみなします。 この場合D4がサブディレクトリにあたるという事になります。 保存されているファイル、フォルダの階層がこの様な内容だった場合、 サブディレクトリであるD4から、F2、F3を上の階層へ移動させる(D3へ移動させる)ツールを探しています。 D1 ├ D2 │ └ F1 └ D3   ├ F2   ├ F3   └ D4 ↑ちなみに作業終了後はこのような状態になっていれば良い。 尚、その際D4は削除されても構いません。 若干分かり難いかもしれませんが、この様な動作を行ってくれる物を探しています。 ご存知の方、心当たりのある方、回答していただけると幸いです、よろしくお願いします。

  • CGIのセキュリティ

    Linux+Apache環境で一般ユーザにCGIを使用させる場合、ホームディレクトリより上の階層に遡らせないようにすることは可能でしょうか? 例えば、/etc/passwdをCGIプログラムからファイルオープンして表示させるようなプログラムなどの動きを封じたいのです。 PHPのセーフモードのようなことはできないのでしょうか?

  • 下のディレクトリ(3つ)に含まれる同じファイル名のテキストを結合し,カレントディレクトリに出力する

    いつもお世話になっております.環境はWindows XPのActiveperlです. やりたいことは「下のディレクトリ(3つ)に含まれる同じファイル名のテキストを結合し,カレントディレクトリに出力する」ことです.具体的にはいかのようにしたいと思っています. 現在のディレクトリ/a/1.txt a b c 現在のディレクトリ/b/1.txt d e f 現在のディレクトリ/c/1.txt g h i 現在のディレクトリ/1.txt a b c d e f g h i ここで私は以下のプログラムを作成しました. use strict; use warnings; my $dirname1 = './a/'; my $dirname2 = './b/'; my $dirname3 = './c/'; opendir(DIR1, $dirname1) or die "$dirname1: $!"; while (my $dir1 = readdir(DIR1)) { next unless (-f $dir1); next unless ($dir1 =~ /\.txt$/); opendir(DIR2, $dirname2) or die "$dirname2: $!"; while (my $dir2 = readdir(DIR2)) { next unless (-f $dir2); next unless ($dir2 =~ /\.txt$/); opendir(DIR3, $dirname3) or die "$dirname3: $!"; while (my $dir3 = readdir(DIR3)) { next unless (-f $dir3); next unless ($dir3 =~ /\.txt$/); if (($dir1 == $dir2) && ($dir2 == $dir3)){ open(FILE1, $dir1) or die "$dir1: $!"; my $line1 = <FILE1>; close(FILE1); open(FILE2, $dir2) or die "$dir2: $!"; my $line2 = <FILE2>; close(FILE2); open(FILE3, $dir3) or die "$dir3: $!"; my $line3 = <FILE3>; close(FILE3); my $joint_line = $line1.$line2.$line3; open(NEWFILE, "> $dir1") or die "$dir1: $!"; print NEWFILE $joint_line; close(NEWFILE); } } } } closedir(DIR1); closedir(DIR2); closedir(DIR3); ですが,以下のようなエラーが発生しています. closedir() attempted on invalid dirhandle DIR2 at joint.pl line 51. closedir() attempted on invalid dirhandle DIR3 at joint.pl line 52. ディレクトリハンドルが使われているけれど閉じているか実際にはディレクトリハンドルでは無い時にこれらの警告が発行されるとこの警告がでるようですが,どのようにしたら解決できるのでしょうか.よろしくお願いします.

  • ディレクトリ内のファイルから情報を取得したい

    ローカルのディレクトリ内に、大量のHTML/css/画像などのファイルがあります。 階層も深くまでサブディレクトリになっています。 このディレクトリ内のhtmlのファイルリストを作成し、 ファイル名・パス・ファイル内にh1が記述されているか、されている場合はなんと記載されているかを取得してリスト化(csv)したいです。 どのような方法が考えられるでしょうか? 当方Macを使用していて、規約で新しいアプリケーションをインストールできません。そのためアプリのインストールをしなくてもできる方法があればアドバイスいただきたいです。 どうかよろしくお願いいたします。