• ベストアンサー

ファイルを出力させる方法

CGIを改造中です。 更新記録CGIなのですが、ログとは別に内容を別ファイルに書き出したいと思っています。 質問が大雑把かもしれませんが、まずはどういったことをする必要がありますか? とりあえず、ログ書き込みの後にサブルーチンを設定して、そこで書き出す内容をセットするのだとは思うのですが...

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

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

  • ベストアンサー
回答No.5

sub jsが、書き出す内容をセットするのではなく、直接書き出してしまっているのが問題ですね。 sub jsのなかで my $js; とかしておいて、 print "document.write~" の部分を $js .= "document.write~" のようにして $js 内にjsの内容を記録し、 sub jsの最後で return $js のようにすると、 my $log = &js; で$logにjsの内容がセットできると思います。

master-3rd
質問者

お礼

返答ありがとうございます。 なとかできました!

その他の回答 (4)

回答No.4

こんな感じですかね。 ---------------------------------- my $log = '書き出したい内容'; OPEN (JS, ">link.js"); print JS $log; CLOSE (JS); ---------------------------------- あとは、CGIの出力結果自体をjsにして <script src="CGIへのパス"></script> と呼び出す手もあると思いますが。

master-3rd
質問者

お礼

すみません。下部分が変になってます。 ----------- 別途サブルーチンを作成 sub js{ print"document.write('<div id=\'theme-sidebar\' title=\'LINKS\'>');\n"; print"document.write(' <h3 class=\'sidebar-cap\' title=\'LINKS\'>Links</h3>');\n"; print"document.write(' <div class=\'sidebar-body sidebar-theme_selector\' style=\'display: block;\'>');\n"; print"document.write(' <ul>');\n"; # ログファイル読み込み open (FILE, "$data") || &error("ファイルが開けません"); @data = <FILE>; close(FILE); # カウント除去 $count = shift (@data); $no = 0; foreach $data (@data) { ($no,$date,$year,$month,$day,$name,$url,$new) = split(/<>/,$data); chomp; print"document.write(' <li><a href=\'$url\' target=\'_blank\' title=\'$name\'>$name</a></li>');\n"; } print"document.write(' </ul>');\n"; print"document.write(' </div>');\n"; print"document.write('</div>');\n"; } ------------------------------------------------- こうすると、500エラーが帰ってきます。 「my $log = &js;」これが良くないような気がするのですが、どう変化させればいいでしょうか?

master-3rd
質問者

補足

返答ありがとうございます。 返事が遅くなってすみません。 以下のようにしてみましたが、うまく動作しません。 ----------------------------------------------- 登録ルーチンの最後あたりに以下を挿入  # .jsファイル書き出し  my $log = &js;  OPEN (JS, ">link.js");  print JS $log;  CLOSE (JS); ----------- 別途サブルーチンを作成 sub js{ print"document.write('<div id=\'theme-sidebar\' title=\'LINKS\'>');\n"; print"document.write(' <h3 class=\'sidebar-cap\' title=\'LINKS\'>Links</h3>');\n"; print"document.write(' <div class=\'sidebar-body sidebar-theme_selector\' style=\'display: block;\'>');\n"; print"document.write(' <ul>');\n"; # ログファイル読み込み open (FILE, "$data") || &error("ファイルが開けません"); @data = <FILE>; close(FILE); # カウント除去 $count = shift (@data); $no = 0; foreach $data (@data) { ($no,$date,$year,$month,$day,$name,$url,$new) = split(/<>/,$data); chomp; ------------------------------------------------- こうすると、500エラーが帰ってきます。 「my $log = &js;」これが良くないような気がするのですが、どう変化させればいいでしょうか? print"document.write(' <li><a href=\'$url\' target=\'_blank\' title=\'$name\'>$name</a></li>');\n"; } print"document.write(' </ul>');\n"; print"document.write(' </div>');\n"; print"document.write('</div>');\n"; }

  • bgbg
  • ベストアンサー率53% (94/175)
回答No.3

大雑把に回答すると、 リンクを掲載したい位置に <script type="text/javascript" src="lik.js"><script> とscriptタグを入れておき、lik.jsは -------------------------------------------------- Content-type: text/javascript document.write(~~~~); document.write(~~~~); document.write(~~~~); -------------------------------------------------- という感じのJavaScriptソースを書き出すCGIにすれば良いでしょう。

  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.2

大雑把すぎるので具体的な回答ができません・・・ 更新記録CGIは何を記録しているか? ログと内容はどのようなものか? まぁ、普通はopenを2回使って二つのファイルに別の内容を記録してやればいいと思いますが。 (サブルーチンは使っても使わなくてもいい)

master-3rd
質問者

補足

すみません。やっぱり大雑把過ぎました。 (急いでいたので、説明が足りませんでした) 自分で設置型のブログを公開しようとがんばっています。 いわゆる左メニュー部分にリンクを掲載しようと思っています。(改造が簡単なので、リンク集CGIでは無く更新記録CGIを使ってます) SSIを使って表示させようとしたのですが、どうも出来ないらしく、Javaスクリプトで表示させる方法しか見つかりませんでした。 で、その方法では外部に.jsファイルを置きそこを修正することで修正が可能になると言うものでした。 なので、管理はCGIに任せ、その結果を「lik.js」のようなファイルで出力したいと思っています。 と言うことで、実際どのように仕込んで言ったらよいでしょうか?

  • KNIGHT11
  • ベストアンサー率21% (82/376)
回答No.1

通常、printでブラウザにHTMLを書き出してますよね? 質問者様のお考え通り、そのprintの下にファイルのopen、print、closeでよいのでは? ※質問の内容を勘違いしているかもしれないので「自信なし」にしときました(^^;

master-3rd
質問者

補足

すみません。やっぱり大雑把過ぎました。 (急いでいたので、説明が足りませんでした) 自分で設置型のブログを公開しようとがんばっています。 いわゆる左メニュー部分にリンクを掲載しようと思っています。(改造が簡単なので、リンク集CGIでは無く更新記録CGIを使ってます) ととにを使って表示させようとしたのですが、どうも出来ないらしく、Javaスクリプトで表示させる方法しか見つかりませんでした。 で、その方法では外部に.jsファイルを置きそこを修正することで修正が可能になると言うものでした。 なので、管理はCGIに任せ、その結果を「lik.js」のようなファイルで出力したいと思っています。 と言うことで、実際どのように仕込んで言ったらよいでしょうか?

関連するQ&A

  • サブルーチンを外部ファイルでまとめる。

    幾つかのサブルーチンを複数のCGIで利用します。 現在は各CGIにまったく同じサブルーチンを書いていますが、美しくないです。 これを別ファイルにまとめて呼び出して利用と言うのは出来ないのでしょうか? 試しに「set.pl」や「set.ini」でサブルーチンを保存し、「require」で呼び出そうとしたのですが、500エラーが出ました。 何か設定が必要でしょうか?

    • ベストアンサー
    • Perl
  • 掲示板に書き込まれたログを別ウィンドウに

    掲示板のフリーCGIを少しだけ改造したいと思っています。ログが初めて表示されたときではなく、ログに変更があったとき(=書き込みがあったとき)に、別ウィンドウをオープンし、ログの内容によってWindowsに表示する内容を変えたいのですが、そんなことってできますか? 昇進機能付きの掲示板で、本当は昇進したときのみ別ウィンドウで画像を表示させたいのですが。

    • 締切済み
    • CGI
  • CGIの勉強が出来るサイト

    CGIの勉強が出来るサイトを探しています。 汎用的なものではなくてピンポイントで回答が得られるサイトがうれしいです。 知りたいことは、パスワードの扱いとユーザーの選別(?)です。 あるページ更新記録CGIを改造したいのです。内容は「更新日」「書き込みした人の名前」「内容」の3点です。 「書き込みした人の名前」からもわかるとおり、管理するのが私一人ではなく複数の人間になるのです。 現在そのCGIにはPassが1つだけ割り振られています。PASSが合っていれば情報入力画面に行くことが出来るという一般的な認証方法です。 しかし、これだと他の人の情報まで書き換えが出来てしまいます。 そこで、PASSまたはIDで入力者を判別し「書き込みした人の名前」の部分を固定にしたいのです。普段はテキストボックスがあり、名前を入力する方式なのですが、これを固定にしたいということです。 素人的に考えればPASS・ID・書き込みした人の名前を別ファイルで保存しておき、もし、このPASSとIDの組み合わせの場合はリストの「書き込みした人の名前」の部分を表示する…という風にしたら良いと思うのですが、合ってますか? そのまま改造前のCGIを知らせて方法を教えていただければ、とてもありがたいのですが、「このページに方法が載っている」とか、「このCGIを参考にしてみたら」などの情報でもかまいません。 よろしくお願いします。

    • 締切済み
    • CGI
  • vbsで同一ファイルに出力するには

    お世話になります。 vbsでログ出力プログラムを作成しています。 このプログラムは同時に複数のプログラムから呼び出されます。 同時書込みの試験をしていた所、2番目に実行したログ出力プログラムでログ出力に 失敗してしまいました。 ###試験方法### ファイルのオープンとクローズの間にmsgboxを実行し、オープン中を維持した状態で、 ログ出力プログラムを実行し、追記処理を行いました。 ###質問内容### 同時書込みは可能でしょうか。 可能な場合、その方法をご教授頂けますでしょうか。 よろしくお願いいたします。

  • 「.pl」ファイルはサブルーチンのようなものなのですか?

    掲示板スクリプトなどを落としてファイルを見ると、「.pl」というファイルがたまにあります。 これはサブルーチン的なやくわりがあるのですか? もしそうなら、どうしてわざわざ「pl」に書き分ける必要があるのでしょうか。すべてひとつの.cgiに書けばいいのに。

    • ベストアンサー
    • Perl
  • ファイルのアクセスログを知りたいのですが

    Wiindows2000の自宅サーバーについて質問です。 タイムカードのようなcgiがあり、1日に2回、アクセスがあってログが 書き換えられます。 例えばNo.001の人は、2007年1月1日に以下のようなファイルを朝作成して 朝のアクセス時刻を手入力により記録、また夕方には帰りの時刻を手入力 により記録しています。 cgi\log\001\070101.dat  この中身は 「9<>00<>17<>00<>社内業務<>」 のようになっています。 この、1日2回のアクセス時刻を管理したいのですが、ファイルの検索で、 2007/1/1に修正されたファイルを検索すると、更新日時は最後にアクセス された夕方の時刻でしかわかりません。 このファイルにいつアクセスされたか、朝と夕方の正確な時刻がわかるような ログは、どこかに残っているのでしょうか。 ご教示よろしくお願いします。

  • wwwsrch.cgi(サイト内検索)設置に失敗

    次のサイトで配布されている改造版のwwwsrchですが。。。 http://www.cj-c.com/cgi_s/srch.htm これをApacheでローカルサーバー上では成功するのですが、CSideNetのサーバーではエラーが出ます。パーミッションの問題なのか、set.cgiのどこかに特殊な書き込みを加えないとだめなのか、わかりません。 パーミション設定の現状(CSideNetの指示通り): jcode.pl 644 set.cgi 701 wwwsrch.cgi 701 wwwsrch.log 600 このサーバーはhtaccess の内容に関してユーザーが何か手を加えなくてはいけないようなことでもあるのでしょうか? どなたか御教示をお願いします。

    • ベストアンサー
    • CGI
  • Flash内にCGIを表示する方法。

    トップページで大きめにフラッシュを動作させます。 最後のフレームで更新記録を表示したいと思っています。フラッシュ内に複数行領域(という言い方であってます?)を表示して、その中にCGIの内容を表示すると言う感じですね。 この場合、どのようにセットしたらよいのでしょうか? また、CGIのほうにも何か仕込みが必要ですか?

    • ベストアンサー
    • Flash
  • htmlからのファイル出力

    すみません。可能かどうかご教示ください。 html内にあるテキストボックスの文字列やチェックボックスのチェック内容など、変更のある文字列や値を別ファイルに出力して、別のhtmlファイルに内容を埋め込んで反映させる・・・などということは可能でしょうか? PC-Aでhtml(A)に内容を書き込んでPC-Bでhtml(B)を開き内容を見る、ということをしてみたいのですが。 例えば、設定値のみのファイルを出力して、それとhtmlを組み合わせる・・・html+javascriptでも不可能でしょうか。 詳しくないので、おかしなことを質問しているかもしれませんがご回答のほど、よろしくお願い致します。

  • Linux ログファイルの読み方を教えてください

    RedHatLinux8を使っており、 ログの内容がよく分からなくて困っています。 /var/log/messages を読むと、 application bug: crond(xxxxx) has SIGCHLD set to SIG_IGN but calls wait(). という記録が、ずらずらと並んでいます。 crondがわけのわからない仕事をしているのだとは思うのですが、どのような意味なのでしょうか? なにかの問題を示しているのであれば、どのような対策が必要でしょうか。 また、たいした問題がないとしても、できれば、この記録でログファイルを埋め尽くすのを避けたいのですが、よい方法はないでしょうか。 以上の件、お教えいただけたら幸いです。よろしくお願いします。

専門家に質問してみよう